具有模板化类型结构问题的 C++ 函数模板参数

标签 c++ function templates c++11 arguments

此代码莫名其妙地无法编译:

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/

相关文章:

c++ - 基于指针类型的参数重载函数的最佳方法 |引用?

php - 如何在 Wordpress 中显示图片

c - 通过函数传递的指针和结构

c++ - 有没有办法检查变量是否为整数? C++

c++ - 没有与 lambda 匹配的函数 std::forward

templates - 在 golang gin 简单模板示例中,如何呈现不带引号的字符串?

c++ - 通过其基础匹配派生类型的模板

c++ - 具有依赖参数类型的概念约束成员函数

c++ - 字节编号问题

c++检测用户是否输入了字符串而不是Int