Могут ли не виртуальные функции-члены использовать параметры шаблона? - PullRequest
0 голосов
/ 25 июня 2018

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

Пример:

template<int N>
class SomeClass
{
public:
    SomeClass() {}

    // Can this function be non-virtual?
    int getValue() {
      return N;
    }

}

Если я правильно понимаю, компилятор будет генерировать один класс для каждого параметра шаблона значение .В приведенном выше примере будет неявно сгенерировано несколько классов (по одному для каждого значения N), полученных из SomeClass.Следовательно, в моем понимании getValue() необходимо будет отправлять динамически (в разные экземпляры функции) в зависимости от фактического (времени выполнения) типа.

Я знаю, что компилятор не предписывает выполнение этих функцийвиртуальный, но может ли он творить чудеса, или мне действительно нужно сделать функцию виртуальной, чтобы вызвать правильный экземпляр, например, через указатель?

1 Ответ

0 голосов
/ 25 июня 2018

Следовательно, в моем понимании, getValue () нужно будет отправлять динамически (в разные экземпляры функции) в зависимости от фактического (времени выполнения) типа.

Тип, который кодируется прямо в объявлении объекта:

SomeClass<0> s;
s.getValue();

Компилятор отправит SomeClass<0>::getValue. Его не нужно отправлять во время выполнения, все статически доступно системе типов. Как только шаблон класса создается для создания класса , он становится таким же, как и любой другой класс. Если бы вы написали:

SomeOtherClass c; // Not a template
s.doSomething();

Компилятор знает, что он должен отправлять SomeOtherClass::doSomething точно так же.

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