2014-02-18 3 views
1

Я пишу класс с функциями шаблона и пытаясь избавиться от включений в файле .h, переместив их в файл .cpp.Функции шаблона C++ и включает в себя

Декларация моего класса выглядит следующим образом:

// myclass.h 
#include <boost/archive/text_oarchive.hpp> 
#include <sstream> 

class MyClass{ 
    ... 
    template<class T> void my_function(const T& t){ 
     std::ostringstream os; 
     { 
      boost::archive::text_oarchive oa(os); 
      oa & t; 
     } 
     do_something(os); 
    } 
} 

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

#include <boost/archive/text_oarchive.hpp> 

в файл .cpp?

Большое спасибо

+0

Вы можете это сделать, если явно создать шаблон в файл cpp –

+0

Для неограниченного 'T', no. Если вам нужно только поддерживать ограниченное количество типов, то комментарий Дэвида является ответом. –

+0

Действительно, если множество возможных T было известно, я мог бы создать экземпляр шаблона в файле cpp. Здесь, к сожалению, это не так. – GHL

ответ

1

Краткая история: вы можете, если вы знаете типы, которые вы собираетесь использовать заранее и явно инстанцировать их в файл CPP.

Как отметил Конрад, если ваш T свободен, я не знаю, как это сделать.

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

+0

Я надеялся, что смогу с этим справиться, используя pimpl, но это тоже не представляется возможным. В любом случае, спасибо за вашу помощь! – GHL

Смежные вопросы