частные шаблонные функции - PullRequest
       8

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

18 голосов
/ 14 сентября 2011

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

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?

Ответы [ 2 ]

12 голосов
/ 14 сентября 2011

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

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


Ссылка:
C ++ 03 стандарт, § 14.7.2.4:

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

8 голосов
/ 14 сентября 2011

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

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

...