【发布时间】:2016-12-25 02:12:32
【问题描述】:
我有一些可变参数模板方法,看起来像这样:
template<typename ... Args>
void Invoke(const char* funcName, Args ... args) const;
template<typename ... Args>
void Invoke(const char* funcName, Args ... args) const
{
SPrimitive params[] = { args ... };
SomeOtherInvoke(funcName, params, sizeof ... (Args));
}
这里是 SPrimitive - 只是一个简单的结构,其中包含任何原始类型的构造函数。
我想为某些复杂类型再做一个 Invoke 定义。这是我的问题: 是否可以在 c++ 11/14 中进行可变参数模板方法专业化? 我的意思是这样的(为简单起见,让我的类型为 int):
template<int ... Args>
void Invoke(const char* funcName, Args ... args)
{
int params[] = { args ... };
SomeComplexInvoke(funcName, params, sizeof ... (Args));
}
这里我想要一个特殊化,它接受任何 int 类型的参数计数,所以我可以这样调用它:
Invoke("method", 2, 4 ,9);
【问题讨论】:
-
没有专业化,但你可以使用重载和 SFINAE。
-
但
std::initializer_list<T>似乎更合适(使用Invoke("method" {2, 4, 9})语法)。 -
@Jarod42 我见过
template<int... args>elsewhere;不能以某种方式将其用于专用于可变数量 int 参数的可变参数函数模板吗?
标签: c++ c++11 variadic-templates