Если я определил интерфейс в базовом классе, и я вызываю этот интерфейс через производный класс, я нашел единственный способ использовать интерфейс этого базового класса, используя «using
» в производном классе. Я не уверен, что это хорошая практика. Вот пример программы
#include <memory>
#include <iostream>
using namespace std;
template <class T>
class B
{
public:
void outB() { cout << "dim from B is " << dim_ << endl ; }
B(int dim) : dim_(dim) {}
~B() {}
protected:
int dim_;
};
template <class T>
class A : B<T>
{
public:
using B<T>::dim_;
using B<T>::outB;
void outA() { cout << "dim from A is " << dim_ << endl ; }
A(int dim) : B<T>(dim) {}
~A() {}
private:
};
int main(int argc, const char *argv[])
{
shared_ptr<A<double> > ap(new A<double>(2));
ap->outA();
ap->outB();
return 0;
}
Если я уберу строку using B<T>::outB;
, программа не скомпилируется. http://ideone.com/x6gm0
Проблема с использованием using
все время заключается в том, что если у меня есть длинная цепочка производных классов (например, если я широко использую шаблон адаптера), я должен написать using ...;
в каждом производном классе для всех унаследованных интерфейсы.
Какова хорошая практика обхода повторения using
в каждом производном классе, чтобы сохранить интерфейсы базового класса?
Обратите внимание, я бы не хотел использовать virtual
. Мне нужна производительность из кода.