1

重複の可能性:
「template」および「typename」キーワードをどこに、なぜ配置する必要があるのですか?

フラグメントコードは次のとおりです。

template <typename alloc_t>
int Protocol_v2<alloc_t>::create(..., alloc_t *alloc, ...) {
    Protocol_v2<alloc_t> * pack = alloc->template malloc<Protocol_v2<alloc_t> >();

Protocol_v2は、次のようなテンプレートクラスです。

    template <typename alloc_t>
class Protocol_v2  { ...}

alloc_tは、次のようなクラスです。

class reverse_allocator { 
...
template<typename T>
    inline T * malloc() {}
...
}

私を悩ませているのはこの行です:

Protocol_v2<alloc_t> * pack = alloc->template malloc<Protocol_v2<alloc_t> >();

それはどういう意味ですか?私はこれまでc++入門書でそれを見たことがありません。

前もって感謝します。

4

1 に答える 1

1

行の途中に表示される「テンプレート」キーワード、特に呼び出しにうんざりしているように聞こえます

alloc->template malloc<Protocol_v2<alloc_t> >();

ポイントは、あなたがこれをしたかったということです:

alloc->malloc<Protocol_v2<alloc_t> >();

...しかし、パーサーは alloc_t の malloc メンバーがテンプレートであることを認識していないため、エラーが発生します。template キーワードを追加すると、続行するのに十分な情報が得られます。

これは、元の質問へのコメントに投稿された Flexo のリンクでより詳しく説明されています。

于 2012-09-18T13:37:46.923 に答える