gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:28:38 24 4
gpt4 key购买 nike

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com