【发布时间】:2016-03-16 10:26:01
【问题描述】:
我有这样的代码:
template <typename T>
inline typename ::std::enable_if<
is_std_tuple<T>{},
T
>::type
get()
{
// pull tuple's elements from somewhere
}
为了推断元组被实例化的模板类型参数,我做了这个转换:
static_cast<T*>(nullptr)
并将其作为参数传递给函数
template <typename ...A>
void deduce_tuple(::std::tuple<A...>* const);
我犯了 UB 吗?有没有更好的办法?
【问题讨论】:
-
将空指针转换为类型并没有错,只要您不取消引用它。你到底想做什么?
-
我只需要函数中的
A...参数包,不知道如何获取它,除了索引技巧和::std::tuple_element<> -
坚持使用
tuple_size和tuple_element的一个好处是您的代码也可以免费使用std::pair和std::array。
标签: c++ templates language-lawyer c++14 template-argument-deduction