gpt4 book ai didi

c++ - 在类模板参数上调用模板方法

转载 作者:搜寻专家 更新时间:2023-10-31 01:28:42 26 4
gpt4 key购买 nike

<分区>

以下放在 .cpp 文件中的最小示例会导致 VisualStudio 2017(15.7.4,启用/std:c++17)中的编译器错误:

template <typename T>
class A
{
void f(T& t)
{
t.g<2>();
}
};

// B is a candidate for the template parameter T in A
struct B {
template <int a>
void g() {
// nothing here
}
};

编译器错误指的是 A::f() 的主体并显示为:

error C2760: syntax error: unexpected token ')', expected 'expression' .

请注意,A 和 B 都没有实际实例化。没有声明B也会出现同样的错误。

但是,如果我调换 A 和 B 的声明顺序,该示例将编译(并且可以实例化 A)。这很奇怪,因为我没有在代码中表达 A 和 B 之间的任何关系。另一个令人惊讶的事实是,在 B::g() 的签名和 g() 的调用中添加一个参数(例如 int)似乎也解决了错误(没有改变声明的顺序)。

我的问题是:(1) 为什么上面的代码会产生编译错误?(2) 如何以干净的方式解决它?

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