Как вызвать функцию-член шаблона в базовом классе по производному указателю - PullRequest
0 голосов
/ 27 марта 2019

Следующий пример - просто упрощенный скелет моего кода. Мой вопрос заключается в том, почему я не могу вызвать функцию-член шаблона из производного указателя. Насколько я понимаю, функцию-член базового класса обычно также можно вызывать из производного объекта или указателя.

class Base {
 public:
  template<typename T> T* data() { 
    static_cast<T *>(data(dtype)); 
  }
  virtual void data(DataType dtype) = 0;
};

class Derived1 : public Base {
  public:
   void data(DataType dtype) override { ... }
};

class Derived2 : public Base {
  public:
   void data(DataType dtype) override { ... }
};

int main() {
  Base * base = new Derived1();
  ...
  Derived1 * derived1 = dynamic_cast<Derived1 *>(base);
  derived1->tempalte data<int>(); // Compiling error
  ...
}

1 Ответ

1 голос
/ 27 марта 2019

Derived1::data скрывает всех членов с именем data в Base. Если вы хотите сделать их видимыми, добавьте эту строку в любом месте тела Derived1:

using Base::data;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...