我在周围工作的问题在下面的代码中的问题... C++可变参数类模板和成员函数
#include <functional>
template<typename... ARGS>
class MyClass {
public :
void function(ARGS... args)
{
}
};
int main(int argc, char * argv[])
{
MyClass<int> myClassInt; // works fine
MyClass<int, float> myClassIntFloat; // works fine
MyClass<void> myClassVoid; // <---- won't compile
return 0;
}
锵相当正确地拒绝编译这个,如果我实例化无效 MyClass的,抱怨MyClass <void> :: function不是一个合法的定义。然而,我所需要的真正的类需要能够在void上实例化这种类型的东西。我一直在盯着这个很长一段时间,我坚持什么模板SFINAE jiggery-pokery我需要解决它。
我意识到我需要以某种方式专注于** void **的情况,但是我无法看到一种不会被一般可变参数情况所捕获的方法。 – brunobignose
因为使用'void'相当于声明了无效的成员函数'void MyClass :: function(void args)'。专业化的确是解决你的问题的关键。 –
为什么不能'MyClass <>'? – Yakk