0

以下のようなテンプレート化されたクラスを実装しようとしています。

   struct Ciccio2 : public T1, public T2, public T3, public T4
   {
     template<typename TR>
     int get(const string& s) const
     {
       return TR::operator()(s);
     }
   };

すべてのテンプレート化された引数は、次のサンプル クラスのようなものです

   struct AA{ 
     int operator()(const string& s) { return 1;}
   };

グローバル抽出関数も使用しようとしていますが、g ++の下のテンプレート関数を使用すると、ビルドエラーが発生します

   template<class TA, class T1, class T2, class T3, class T4>
   int extract(const Ciccio2<T1,T2,T3,T4>& obj, const string& s)
   {
     return obj.get<TA>(s);
   }

以下のコードは言っていません

expected primary expression before > token

私が実装しようとしていることは正しいですか?

4

2 に答える 2

1

objは型に依存する式であるため、コンパイラは名前検索を使用して、 がオブジェクト、関数、型、またはテンプレートであるかどうかを判断しませんobj.get。強制しない限り、コンパイラはそれが構文解析用のオブジェクトまたは関数であると想定します。次に、小<なり演算子 (<テンプレート引数リストの先頭ではない) が表示され、その後すぐに混乱します。必要なもの:

return obj.template get<TA>(s);

template および typename キーワードをどこに、なぜ配置する必要があるのですか?という質問も参照してください。

于 2014-06-23T18:26:42.510 に答える