C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 如何划分boost :: optional?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@L_673_0@这样的代码: @H_772_5@ @H_772_5@
boost::optional<double> result = _ind1.Value() / _ind2.Value();
@H_772_5@每个arg都是boost :: optional< double>太:

@H_772_5@
boost::optional<double> Value() {
    return value;
}
@H_772_5@错误是:

@H_772_5@错误1错误C2676:二进制’/’:’boost :: optional< T>‘没有定义此运算符或转换为预定义运算符可接受的类型
    2 IntelliSense:没有运算符“/”匹配这些操作数
            操作数类型是:boost :: optional< double> / boost :: optional< double>

@H_772_5@我明白分裂似乎没有定义.我希望结果是boost :: none如果两个参数中的任何一个都没有 – 否则我希望它是正常的双重除法.我应该自己写吗?

解决方法

当然,支持诸如双倍分割之类的简单操作. @H_772_5@ @H_772_5@但你并不想分开双打.你试图划分boost :: optional< double> s,这是一个完全不同的故事.

@H_772_5@如果需要,可以为此定义除法运算符.它可能看起来像(未经测试):

@H_772_5@
template<typename T>
boost::optional<T> operator/(const boost::optional<T>& a,const boost::optional<T>& b)
{
    if(a && b) return *a / *b;
    else return boost::optional<T>();
}
@H_772_5@在C 11(代码由Yakk提供):

@H_772_5@
template<class T,class U> struct divide_result {
  typedef typename std::decay<decltype(std::declval<T>()/std::declval<U>())>::type;
};
template<class T,class U> using divide_result_t=typename divide_result<T,U>::type;
template<typename T,typename U>
boost::optional<divide_result_t<T,U>> operator/(const boost::optional<T>& a,const boost::optional<U>& b)
{
    if(a && b) return *a / *b;
    else return boost::none;
}
@H_772_5@我使用了一个模板,因为现在它对int,float等也有好处.

大佬总结

以上是大佬教程为你收集整理的c – 如何划分boost :: optional?全部内容,希望文章能够帮你解决c – 如何划分boost :: optional?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。