我有这样的代码:
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 罪吗?有没有更好的办法?
最佳答案
这里的不完美之处在于我们不能部分特化函数模板。你的方法很好,因为我们没有取消引用空指针;我更喜欢使用指定标签:
template <typename...> struct deduction_tag {};
template <typename... Ts>
std::tuple<Ts...> get(deduction_tag<std::tuple<Ts...>>) {
// […]
}
template <typename T>
std::enable_if_t<is_std_tuple<T>{}, T> get() {
return get(deduction_tag<T>{});
}
关于c++ - 推导元组的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36032917/