带有模板化类型structure灾难的C++函数模板参数
C++ function template argument with templated type struct woes
此代码无法编译:
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>(); }
您可以查看此链接以了解语法解释。
相关文章:
- 当函数模板参数是具有默认参数的类模板时,函数模板参数的推导如何执行
- 将重载的成员函数传递给函数模板
- C++17中函数模板中的静态数组初始化(MSVC 2019)
- 为什么 gcc 和 clang 为函数模板的实例化生成不同的符号名称?
- 具有常量引用参数的函数模板专用化
- std::span<const T> 作为函数模板中的参数
- 如何编写一个完美的缩写函数模板?
- 仅在函数模板中为那些定义了函数的类型执行函数
- 如何在C++中伪造虚拟可变参数函数模板?
- 以下代码中的函数模板有什么问题?
- 在 C++20 中是否不再允许在 std 中对程序定义类型的函数模板进行专用化?
- 将显式实例化的函数模板与转换匹配
- 使用定义函数模板别名
- 函数模板返回类型
- C++有什么方法可以在既不调用函数模板也不提供其模板参数的情况下引用函数模板?
- C++ std::functional 中的可变参数函数模板
- 单行函数模板 c++ 的内联性保证
- C++函数模板需要 &for 数组参数
- 概念解析为使用 std::make_signed_t 时意外的函数模板
- 两个函数模板候选项.将一个参数作为引用后,选择不太专业的模板