私はこのようなクラスを持っています:
template<char _character>
class Foo
{
...
public:
static const char character = _character;
};
static を転送せずに、クラス外の _character パラメータにアクセスする方法はありますか? のようなものFoo::_character
。
パターン マッチングを使用できます。
template<typename T>
struct get_character;
template<char _character>
struct get_character<Foo<_character> > {
static const char character = _character;
};
使用するには:
get_character< Foo<'a'> >::character
簡単に言えば、いいえ、できません。
_character
はテンプレート パラメータであり、テンプレートをインスタンス化するまで不明です。
インスタンス化後_character
は、具体的なインスタンス化のメンバーではなくなりましたが、渡した char はそうです。
作成すると、クラス テンプレートのインスタンス化に使用されるテンプレート パラメーターに依存するchar データ メンバーがstatic const char character = _character;
作成されます。
インスタンス化されたクラス テンプレートから上記のデータ メンバーにアクセスできるようになりました。
typedef Foo<'c'> CFoo;
std::cout << CFoo::character << std::endl;
クラス テンプレートをインスタンス化すると、Foo<'c'>::_character
存在しなくなります。