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>(); }
};

如果我将#if参数更改为 0,它会以某种方式固定。有人可以对此有所了解吗?请注意,看似毫无意义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 回答