0

我有这样的课:

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

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

4

2 回答 2

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
于 2012-11-27T00:31:53.160 回答
1

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

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

实例化后_character不再是您具体实例化的成员,而是您传入的字符。

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

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

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

一旦你实例化了类模板,Foo<'c'>::_character就不存在了。

于 2012-11-27T00:36:21.500 回答