带有模板化类型structure灾难的C++函数模板参数

C++ function template argument with templated type struct woes

本文关键字:C++ 函数模板 参数 structure 类型      更新时间:2023-10-16

此代码无法编译:

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

很难用你所有的typedef来判断,但我敢打赌你需要:

m_ptr->template get<T>();

您应该如下修复函数调用,添加template关键字:

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

您可以查看此链接以了解语法解释。