2017-04-08 10 views
1

私はC++を学んでいます。 クラスの外にあるので、テンプレートパラメータ名を使用したいと思います。 ベストソリューションを見つけることができませんでしたが、今は "using"宣言を使用しています。ただし、同じ名前を使用することはできません。 もっと良い解決策はありますか?または、テンプレートパラメータを "using"で再宣言するための良い習慣や良い名前がありますか?クラス外でテンプレートパラメータ名を使用するにはどうすればよいですか?

次のコードは例です。それは、Type = T_TypeAを使用してT_TypeAを宣言する再しかし、それは構造体Bにあるように私はT_TypeAを使用したい

template <typename T_TypeA> 
struct A { 
    using Type = T_TypeA; 
}; 

template <typename Object> 
struct B { 
    using Type = typename Object::Type; 
    Type object = 3; 
}; 

void test_using_for_template_parameter_name(void) { 
    B<A<int>> b; 
    std::cout << "value = " << b.object << std::endl; 
} 

答えて

2

次のコードは、例です。 Type = T_TypeAを使用してT_TypeAを再宣言しますが、構造体にあるようにT_TypeAを使用したいと思います。

テンプレートパラメータ名が機能テンプレートまたはクラステンプレート内でのみ有用と表示され、彼らはそれの外には意味がありません。だから、:ここ

template <typename T_TypeA> 
struct A { 
    using Type = T_TypeA; 
}; 

T_TypeAstruct Aをインスタンス化する際にテンプレート引数として使用タイプのプレースホルダ名として機能します。

これは、タイプの名前に別名を付けるためにtypedefが必要な理由です。したがって、表示する名前がの場合は、次のようにすることができます。

template <typename TypeA> 
struct A { 
    using T_TypeA = TypeA; 
}; 
1

私はそれが構造体BにあるようT_TypeAを使用したい

私はそれを行う方法はないと思います。あなたの最良の選択肢は、あなたがすでに行ったことです。

using Type = T_TypeA; 

using Type = typename Object::Type; 
関連する問題