此代码莫名其妙地无法编译:
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
thing 实际上在我的真实代码中做了一些有用的事情。
我正在使用 g++ 4.7.1 和 -fstd=gnu++11
,错误如下(指向我声明anothertype<T>::get
的行:
error: expected primary-expression before '>' token
error: expected primary-expression before ')' token
最佳答案
很难用你所有的 typedef 来判断,但我敢打赌你需要:
m_ptr->template get<T>();
关于具有模板化类型结构问题的 C++ 函数模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14738965/