我认为可以在模板函数中使用decltype
声明条件类型。但似乎没有。任何人都可以指出我的测试代码有什么问题吗?
#include <boost/type_index.hpp>
using boost::typeindex::type_id_with_cvr;
#define print_type(var) do { \
std::cout << type_id_with_cvr<decltype(var)>().pretty_name() << std::endl; \
} while(0)
template <typename T1, typename T2>
auto max(T1 a, T2 b) -> decltype(a < b ? b : a) {
decltype(a < b ? b : a) c = a < b ? b : a;
print_type(c);
return a < b ? b : a;
}
int main() {
int i = 10;
double d = 3.3;
decltype(i < d? d : i) r = i < d? d : i;
print_type(r); // -> double
std::cout << r << std::endl; // 10
}
答案 0 :(得分:3)
我想你的意图是
decltype( a < b ? a : b )
是在b
时获取a < b
的类型,否则获取a
的类型。
那就是:我想您的意图是根据a
和b
的欠幅时间值获得确定运行时间的类型。
这在C ++中是不可能的,因为必须确定变量的类型编译时间。
使用decltype()
,您可以获得三元运算符的类型
a < b ? a : b
不依赖于a
和b
的值,而只取决于其类型。
所以,在案件中
decltype(i < d? d : i)
其中i
是int
且d
是double
,您获得double
,其值为i
和{{ 1}}无关紧要。