Я озадачен тем, почему объявление void operator()(int)
в базовом классе в приведенном ниже примере кода, по-видимому, скрыто, когда производный класс реализует void operator()(int,int,int)
.Как я могу получить объявление operator () (int) из базового класса foo
, которое будет видно в производном классе 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 ++ с отмеченными строками без комментариев сообщение об ошибке будет иметь виднет совпадения для вызова 'bar (int)' ... кандидат - void bar :: operator () (int, int, int) ... кандидат ожидает 3 аргумента, 1 предоставлено. "