Я озадачен тем, почему объявление 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 предоставлен. "