Подтвердить что ты не робот

Частные функции шаблона

У меня есть класс:

C.h

class C {
private:
  template<int i>
  void Func();

  // a lot of other functions
};

C.cpp

// a lot of other functions

template<int i>
void C::Func() {
 // the implementation
}

// a lot of other functions

Я знаю, что это не лучшая идея переместить реализацию шаблона в файл cpp (потому что он не будет видно из других cpp, которые могут включать заголовок с объявлением шаблона).

Но как насчет частных функций? Может ли кто-нибудь сказать мне, есть ли недостатки в реализации частных функций шаблона в файле .cpp?

4b9b3361

Ответ 1

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

Таким образом, до тех пор, пока соблюдаются приведенные выше правила, все еще остается в стороне интерфейс и реализация, разделенные в заголовках и исходных файлах.


Справка:
стандарт С++ 03, § 14.7.2.4:

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

Ответ 2

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

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