Единственный способ сделать это - написать явное определение
эта функция в производном классе ..., и я надеялся, используя мощь
помощь
Ключевое слово
using
в вашем контексте используется только для приведения имен в текущую область (используется против скрытия имени). Предположим, что запрашиваемая вами функция уже есть. Теперь посмотрите следующие модифицированные коды:
struct A
{
virtual char const * value() const
{ return "A"; }
void value (double); // new function
};
class C : public A, public B
{
public:
using B::value;
void value(int); // new function
};
Предположим, у нас есть функции с тем же именем, что и value(int)
в C
и value(double)
в A
. Эти 2 функции не имеют ничего общего с virtual value()
и используются с объектом C
.
Как вы будете использовать A::value(double)
с C
объектом? Естественно, вы должны сделать using A::value;
в теле C
. Теперь из-за этого в качестве побочного эффекта у нас есть 2 virtual
соответствия функции: A::value() const
и B::value() const
!
Что выбрать при вызове с A*
или B*
?
Это только один пример, но могут быть и другие проблемы. Все, что вы упомянули в своем вопросе, - лучший способ добиться правильного результата. В нем прямо сказано, что C::value() const
является оберткой вокруг B::value() const
.