Абстрактный класс, обращающийся к реализованному типу через шаблонную виртуальную функцию? - PullRequest
1 голос
/ 06 июня 2011

Мне было интересно, можно ли каким-либо образом написать шаблонную функцию в абстрактном классе и создать ее экземпляр (функцию шаблона) автоматически с типом производного класса?

Итак, у вас естькласс, который выглядит примерно так:

class A
{
  virtual template < typename T>
  void vtfunc(void)
};
class B : public A
{
  /// No declared members pertaining to this example
}

Затем, когда объявляется класс, производный от A, он компилирует "vtfunc" с собой в качестве параметра шаблона T. Затем, вызывая vtfunc () через интерфейс Aвызывает isntance этой функции, скомпилированной для ее производного класса B.

Есть ли способ сделать это или написать что-то неуместное, имеющее этот эффект?

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

Ответы [ 2 ]

2 голосов
/ 06 июня 2011

Я не уверен, что вы ищете, но один общий шаблон - это так называемый любопытно повторяющийся шаблон ;здесь сам базовый класс является шаблоном, а не его функциями-членами.Другими словами:

template <typename T>
class A 
{ 
    virtual void vtfunc(void) 
};

class B : public A<B>
{
    …
};
1 голос
/ 06 июня 2011

Рассмотрите возможность использования функции, не являющейся членом.

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