是否可以专门化模板类来获取其他模板参数?
例如:
template <typename T>
struct X {
void foo() { cerr << "Generic" << endl;}
};
template <>
template <bool b>
struct X<int> {
void foo() { cerr << "Specialization" << endl;}
};
我无法用g ++完成上述工作,但也许有一些技巧可以使这个工作。
修改:我不想将模板<bool b>
移动到基本模板X,因为它只是X<int>.
的功能
如果必须,有没有办法让用户不必为它指定任何值?我真的很喜欢
一种不沿着这条路走下去的方法。
答案 0 :(得分:2)
您可以将主模板更改为接受代理特征类:
template <typename T>
struct Foo
{
typedef typename T::type type;
// work with "type"
void static print() { std::cout << T::message << std::endl; }
}
然后定义特质类:
template <typename T>
struct traits
{
typedef T type;
static const char * const message = "Generic";
};
现在您可以实例化Foo<traits<double>>
和Foo<traits<int>>
,并且可以将其他行为封装到traits类中,您可以根据需要对其进行专门化。
template <>
struct traits<int>
{
typedef int type;
static const char * const message = "Specialized";
};