Хранение определений функций шаблона C ++ в файле .CPP - PullRequest
438 голосов
/ 22 сентября 2008

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

.h file

class foo
{
public:
    template <typename T>
    void do(const T& t);
};

.cpp файл

template <typename T>
void foo::do(const T& t)
{
    // Do something with t
}

template void foo::do<int>(const int&);
template void foo::do<std::string>(const std::string&);

Обратите внимание на две последние строки - шаблонная функция foo :: do используется только с ints и std :: strings, поэтому эти определения означают, что приложение будет ссылаться.

Мой вопрос - это отвратительный взлом или это будет работать с другими компиляторами / компоновщиками? В настоящее время я использую этот код только с VS2008, но хочу портировать на другие среды.

Ответы [ 11 ]

0 голосов
/ 27 октября 2008

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

При использовании вместе с явным созданием экземпляров библиотека Boost Concept Check Library (BCCL) может помочь вам сгенерировать код функции шаблона в файлах cpp.

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