访问类外的类模板变量

时间:2012-11-27 00:22:38

标签: c++ templates

我有一个这样的课程:

template<char _character>
class Foo
{
    ...
public:
    static const char character = _character;
};

有没有办法可以访问类外的_character参数,而没有静态转发它?类似于Foo::_character

2 个答案:

答案 0 :(得分:1)

您可以使用模式匹配:

template<typename T>
struct get_character;
template<char _character>
struct get_character<Foo<_character> > {
    static const char character = _character;
};

使用:

get_character< Foo<'a'> >::character

答案 1 :(得分:1)

简短的回答是不,你不能。

_character是模板参数,在您实例化模板之前是未知的。

实例化后_character不再是具体实例化的成员,而是 你传给的char是。

通过创建static const char character = _character;,您将在用于实例化类模板的模板参数上创建 char数据成员 依赖

您现在可以从实例化的类模板访问所述数据成员:

typedef Foo<'c'> CFoo;
std::cout << CFoo::character << std::endl;

实例化类模板后,Foo<'c'>::_character不存在。