gpt4 book ai didi

c++ - operator() 的继承

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:16:46 28 4
gpt4 key购买 nike

当派生类实现 void operator()(整数、整数、整数)。如何让基类 foo 中的 operator()(int) 声明在派生类 bar 中可见?也就是说,我如何修改示例,以便 operator()(int) 的调用起作用?

#include <iostream>

struct foo
{
void operator()(int)
{
std::cout << "A" << std::endl;
}
};

struct bar : foo
{
// If this is uncommented, the code will not compile.
// void operator()(int, int, int) {}
};

int main()
{
bar b;
b(1);
return 0;
}

当使用 g++ 编译且标记行未注释时,错误消息是“no match for call to 'bar (int)' ... candidate is void bar::operator()(int,int, int) ... 候选人需要 3 个参数,其中 1 个已提供。”

最佳答案

没错。派生类函数隐藏基类函数而不是重载。不过修复非常简单:

struct bar : foo
{
using foo::operator();
void operator()(int, int, int) {}
};

关于c++ - operator() 的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8670629/

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