使用模板参数怎么样?
struct Orange {};
class MyClass
{
public:
template<typename CT>
MyClass(CT, std::string & name, float size);
};
template<>
MyClass::MyClass<Orange>(Orange, std::string & name, float size)
{
// The orange case
}
可以用作:
int main()
{
std::string name("Fred");
MyClass myObject(Orange(), name, 12.0f);
return 0;
}
在上面的形式中,它只是一个更复杂的标签调度方法。
优点在于您可以在模板参数中添加额外的细节并基于它们创建通用构造函数:
struct Orange { static const int pips = 7; };
struct Banana { static const int pips = 1; };
class MyClass
{
int pips;
public:
enum ConstructorType {Orange, Apple, Banana};
template<typename CT>
MyClass(CT, std::string & name, float size);
};
template<typename CT>
MyClass::MyClass(CT, std::string & name, float size)
: pips(CT::pips)
{
}