我认为条件类型可以在模板函数中使用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
}发布于 2018-01-01 11:59:57
我想你的意图是
decltype( a < b ? a : b )是在a < b时获取b的类型,否则获取a的类型。
也就是说:我假设您的意图是根据a和b的矮小时间值获得一个类型确定的运行时。
这在C++中是不可能的,因为变量的类型必须在编译时中决定。
使用该decltype(),您可以获得三元运算符的类型
a < b ? a : b这并不依赖于a和b的值,而仅仅依赖于它们的类型。
所以,在这种情况下
decltype(i < d? d : i)其中i是一个int,d是一个double,您将获得一个double,而i和d的值是不相关的。
https://stackoverflow.com/questions/48047033
复制相似问题