gpt4 book ai didi

c++ - 奇怪的重复模板模式。没有匹配函数调用..模板参数/替换失败

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

我正在尝试用 C++ 实现 Curiously Recurring Template Pattern,但我无法让它工作。有人可以指出我的代码有什么问题吗?

template <typename T>
struct Base {
int x;
Base():x(4){}
};

struct Derived: Base<Derived> {
Derived(){}
};

template<typename H>
void dosomething(Base<H> const& b) {
std::cout << b.x << std::endl;
}


int main() {
Derived k();
dosomething(k);
}

我试图保持 dosomething 的签名不变,以便任何实现 Base 中方法的类都可以在 dosomething() 中使用。

这是我遇到的错误:

||=== Build: Debug in test (compiler: GNU GCC Compiler) ===|
In function ‘int main()’:
error: no matching function for call to ‘dosomething(Derived (&)())’
note: candidate: template<class H> void dosomething(const Base<H>&)
note: template argument deduction/substitution failed:
note: mismatched types ‘const Base<H>’ and ‘Derived()’

为什么会出现此错误?调用 dosomething() 时,编译器不应该将 k 视为常量引用吗?

最佳答案

Derived k(); // function declaration

它是一个函数声明,它不带任何参数并返回Derived 对象。编译器错误通过

告诉你
no matching function for call to ‘dosomething(Derived (&)())
^^^^^^^^^^^^^

尝试

 Derived k; // instance of object
dosomething(k);

关于c++ - 奇怪的重复模板模式。没有匹配函数调用..模板参数/替换失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52799608/

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