Я знаю, что этот вопрос уже задавался в той или иной форме. Но я все еще в замешательстве.
Предположим, у меня есть два класса.
class A{
public:
void foo(int a, int b);
protected:
virtual void foo(int a) = 0;
}
class B : public class A{
void foo(int a);
}
Теперь, если я хочу сделать видимость не виртуальной функции в классе A общедоступной в классе B …. как мне это сделать ?? … Другими словами, в настоящее время я могу вызывать не виртуальную функцию таким образом
B b;
b.A::foo(3, 5);
и я хочу избежать этого
и решение положить это
using A::foo;
в общественных местах B относится к виртуальной функции в A …. не к виртуальной функции … поэтому я думаю, что это не решение.
class A{
public:
void foo(int a, int b);
protected:
virtual void foo(int a) = 0;
};
class B : public A{
public:
using A::foo;
protected:
void foo(int a);
};
void f()
{
B b;
b.foo(1,2); // OK
b.foo(3); // error: ‘virtual void B::foo(int)’ is protected within this context
}
работает как предполагалось. foo с двумя параметрами вызывается, foo с одним — нет.
Других решений пока нет …