6

このコードは不可解にコンパイルされません:

struct sometype
{
    template <typename T>
    T* get() { return nullptr; }
};

template <typename T>
struct anothertype
{
#if 1
    template <typename T2> struct some_wrapper { typedef T2 type; };
    typedef typename some_wrapper<sometype>::type thetype;
#else
    typedef sometype thetype;
#endif
    typedef thetype* Ptr;

    Ptr m_ptr;
    T* get() { return m_ptr->get<T>(); }
};

引数を 0に変更する#ifと、何とか修正されます。誰かがこれに光を当てることができますか? some_wrapper一見無意味なことは、実際には私の実際のコードで何か役に立つことに注意してください。

私は g++ 4.7.1 を-fstd=gnu++11で使用しています。エラーは次のとおりです (宣言する行を指していますanothertype<T>::get:

error: expected primary-expression before '>' token
error: expected primary-expression before ')' token
4

2 に答える 2

8

すべての typedef で判断するのは難しいですが、次のものが必要だと思います。

m_ptr->template get<T>();
于 2013-02-06T21:25:00.320 に答える
6

templateキーワードを追加して、次のように関数呼び出しを修正する必要があります。

T* get() { return m_ptr->template get<T>(); }

構文の説明については、このリンクを確認してください。

于 2013-02-06T21:25:08.260 に答える