【发布时间】:2014-09-19 19:27:51
【问题描述】:
我编写了一个编译时搜索并通过模板参数查找,它工作正常。当没有找到项目时,我对如何提供默认值感到困惑。
我尝试使用 sizeof...(args_t) 创建模板特化以终止。这是不允许的。所以,我不知道该怎么做。
这是我现在得到的:
template <typename... args_t> class c
{
template <size_t pos, typename _t, typename... a_t> struct at : at<pos - 1, a_t...> { };
template <typename _t, typename... a_t> struct at<0, _t, a_t...>
{
using t = _t;
};
};
我需要的是这样的:
template <typename... args_t> class c
{
template <> struct at<sizeof...(args_t)>
{
using t = default_value;
};
};
那么,如何根据可变参数元素的数量创建模板特化?
【问题讨论】:
-
你不能把它们打包成一个元组吗?
using t = typename std::tuple_element<pos, std::tuple<Args...>>::type; -
Little OT:以
_t结尾的名称在POSIX 系统中是保留的。 -
@chris 对这里有帮助吗?
-
@black,这适用于所有内容,还是仅适用于全局名称?
-
@MGaz,哦,我明白了。抱歉,我看错了问题。
标签: c++ templates c++11 variadic-templates template-specialization