Наследование оператора ()

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

5
задан void-pointer 29 December 2011 в 16:43
поделиться