我想用一个函数传递参数给不同的类,所以我用类模板专业化和可变参数函数模板,波纹管是代码:为什么这个代码与模板特错误
#include <iostream>
using namespace std;
template <typename T0, typename T1>
class Package
{
T0 Data0;
T1 Data1;
public:
Package(T0 data0, T1 data1): Data0(data0), Data1(data1) {}
void Display()
{
cout << Data0 << " " << Data1 << endl;
}
};
template <typename T0>
class Package<T0, void>
{
T0 Data0;
public:
Package(T0 data0): Data0(data0) {}
void Display()
{
cout << Data0 << endl;
}
};
template <>
class Package<void, void>
{
public:
Package() {}
void Display()
{
cout << "have no member" << endl;
}
};
template <typename... Args>
void Post(Args... args)
{
Package<Args...> pak = Package<Args...>(args...);
pak.Display();
}
int main()
{
int x = 5;
float y = 0.9;
Post(x, y);
Post(x);
Post();
return 0;
}
我有这样的错误:
In instantiation of 'void Post(Args ...) [with Args = {int}]':
52:15: required from here
43:26: error: wrong number of template arguments (1, should be 2)
5:11: error: provided for 'template<class T0, class T1> class Package'
43:26: error: wrong number of template arguments (1, should be 2)
5:11: error: provided for 'template<class T0, class T1> class Package'
In instantiation of 'void Post(Args ...) [with Args = {}]':
53:14: required from here
43:26: error: wrong number of template arguments (0, should be 2)
5:11: error: provided for 'template<class T0, class T1> class Package'
43:26: error: wrong number of template arguments (0, should be 2)
5:11: error: provided for 'template<class T0, class T1> class Package'
包可以带2/1/0参数,Post可以提供2/1/0参数,但是为什么有这个错误呢?谢谢。
的'Package'专业化的构造函数(不是过载一套“组合”,因为它们属于到不同的类型)可以使用2/1/0个参数,但是Package类模板本身总是需要两个模板参数。也就是说,即使没有可变功能,“包装”也是非法的。请参阅@ max66的解决方案。 –
aschepler