【发布时间】:2018-03-17 23:11:36
【问题描述】:
这个函数模板应该使用索引函数从一个元组返回X类型的第一个元素,但它不会编译。
template<class X, class F, class... R>
constexpr X getByType(tuple<F, R...> t) {
if (is_same<F,X>::value) {
return get<0>(t); //ERROR POSITION
}
if (sizeof...(R) == 0) {
throw 4;
}
return get_vector<X>(tail(t));
}
int main() {
int i = get<int>(make_tuple(4.2,"assaaa",4));
}
编译器说它不能将 double 类型转换为 int。这个元组的第一个元素是一个双精度。我猜原因是 if 条件要在运行时进行评估。如何在编译时执行元组第一个元素的条件返回?
【问题讨论】:
-
似乎是 constexpr_if 的一个很好的用例
标签: c++ templates metaprogramming template-meta-programming