c++ - 为什么我不能调用派生自的模板类的模板化方法

标签 c++ templates

struct Messages
{
      template <typename V>
      static const char* message() {return "test mesage";}
};

template <int Min, class M=Messages>
struct Test: public M
{
    Test() 
    {
        M::message<int>(); //error: expected primary-expression before 'int'
    }
};

int main()
{
     Test<5, Messages> t;
}

我怀疑这与一些相互依赖有关,比如 Test 的代码依赖于基类 M,其方法在 Test 中是专门的。这是正确的吗?

最佳答案

M::message 是一个从属名称,因为 M 是一个模板参数。编译器无法知道依赖名称本身就是模板,因此您需要明确指定:

M::template message<int>();

否则,编译器将代码解析为就好像 M::message 是一个值,这赋予后面的尖括号不同的含义(即它们被解析为小于和大于运算符,而不是作为模板列表分隔符)。编译器无法从这样的错误解析中恢复。

关于c++ - 为什么我不能调用派生自的模板类的模板化方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9705031/

相关文章:

c++ - 命名局部变量 `property` 有什么问题吗?

c++ - 我可以定义 constexpr 匿名/未命名变量吗?

c++ - C++ 错误 : redefinition of class constructor using templates

c++ - 链接具有不兼容依赖项的库

c++ - 在我的 Qt 应用程序中打开 Excel 并与之通信

c++ - 如何构建独立于编译器的 C++ 库(适用于 Solaris Studio 和 gcc)?

c++ - 检查引用上的静态转换

android - 从命令行创建项目时如何在android中使用代码模板?

C++:头文件中的模板正在摧毁我

ruby 模板 : How to pass variables into inlined ERB?