std::result_of 用于内置运算符
std::result_of for built-in operators
通过result_of
确定-int()
或double()*double()
结果的正确语法是什么?
此操作失败
std::result_of<operator-(int)>::type
std::result_of<operator*(double,double)>::type
std::result_of
真的不是这里要采取的方法。 decltype
完全可以做你想要的,可以用作decltype(-int())
,decltype(double()*double())
等。如果您不知道该类型是否为默认构造型,也可以使用 std::declval
: decltype(-std::declval<int>())
。
任何涉及operator-
的语法都不起作用的原因是,operator-
语法仅适用于自定义重载运算符。内置运算符没有任何可以引用的支持函数。
decltype
绝对是这里要走的路,但如果你必须使用 result_of
,可以使用 <functional>
中定义的函数对象来完成
例如,要获取结果的double * double
类型,请使用
std::result_of<std::multiplies<double>(double, double)>::type
同样,一元否定将是
std::result_of<std::negate<int>(int)>::type
使用 C++14,您甚至可以查询两种不同类型的数学运算的结果类型
std::result_of<std::plus<>(double, int)>::type
当然,同样的技术也可以用于用户定义的类型
。struct foo{};
struct bar{};
bar operator/(foo, foo) { return bar{}; }
std::result_of<std::divides<>(foo, foo)>::type
现场演示
相关文章:
- 内置函数可查看CPP中的成员变量
- 是否有内置方法可以强制转换为不同的基础类型,但保留常量限定符?
- 按字母顺序对字符串中的字母进行排序,而无需使用内置的 sort()
- C++内联运算符重载中,请参阅当前对象
- 将字符串转换为浮点数或整数,而无需使用内置函数(如 atoi 或 atof)
- 何时包含内置类型和运算符的标头?
- 将内置类型变量传递给只有一个类类型参数的"+"运算符函数时自动类型转换的构造函数
- c++标准是否指定了运算符&&(内置)的求值顺序?
- 运算符表达式上下文中重载解析的内置运算符候选项的正确行为
- 内置类型的运算符函数
- 内置类型的重载运算符
- 内置运算符(新的,删除和函数调用除外)如何返回
- C 是否会用功能调用代替内置运算符
- 为什么指针类型的内置关系运算符不生成C++的总顺序?
- 如何使用内置返回类型重载运算符?
- std::result_of 用于内置运算符
- 我可以使用函数表示运算符#()来调用内置类型的运算符吗
- 是否可以获取内置标准运算符的函数指针
- 内置类型的运算符重载C++以访问 2D 数组中的元素
- 获取 &for 内置和运算符的类型&()?