c – 如何划分boost :: optional?

c – 如何划分boost :: optional?,第1张

概述我有这样的代码: boost::optional<double> result = _ind1.Value() / _ind2.Value(); 每个arg都是boost :: optional< double>太: boost::optional<double> Value() { return value;} 错误是: 错误1错误C2676:二进制’/’:’boost :: opti 我有这样的代码:

boost::optional<double> result = _ind1.Value() / _ind2.Value();

每个arg都是boost :: optional< double>太:

boost::optional<double> Value() {    return value;}

错误是:

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

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

解决方法 当然,支持诸如双倍分割之类的简单 *** 作.

但你并不想分开双打.你试图划分boost :: optional< double> s,这是一个完全不同的故事.

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

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>();}

在C 11(代码由Yakk提供):

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;}

我使用了一个模板,因为现在它对int,float等也有好处.

总结

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

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

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1218050.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存