2015-09-07 2 views
0

В последние дни я struggeling с проблемой подталкивания сериализации:Повышение Сериализации - Экспорт в нескольких файлах CPP

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

template<typename T> 
void 
Helper::SaveToFile(T* data, std::string file) 
{ 
    std::ofstream ofs(file.c_str()); 
    boost::archive::text_oarchive oa(ofs); 
    oa << data; 
} 

Для сериализации производных классов, чтобы работать, мне нужно использовать подталкивание макро BOOST_CLASS_EXPORT. Тем не менее, я не могу поместить этот метод шаблона в файл CPP, и с макросом в заголовке я получаю эти неприятные ошибки «duplicate init_guid».

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

Есть ли у кого-нибудь советы по тому, как он работает с методами шаблонов или как экспортировать классы в несколько файлов CPP?

Я уже пробовал разделить BOOST_CLASS_EXPORT на BOOST_CLASS_EXPORT_KEY и BOOST_CLASS_EXPORT_IMPLEMENT, все еще ведущий к той же ошибке. Кроме того, я действительно не знал, куда положить макрос BOOST_CLASS_EXPORT_IMPLEMENT, когда есть только файл заголовка для определенного класса.

ответ

0

Вы на правильном пути.

Разделение на BOOST_CLASS_EXPORT_KEY и BOOST_CLASS_EXPORT_IMPLEMENT действительно является ключом к решению.

Как с символами всех C++ с внешним связыванием, вы

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

В этом случае просто включите BOOST_CLASS_EXPORT_IMPLEMENT не более одной (статически) связанной единицы перевода (подумайте: cpp-файл).

См фона:

+0

Спасибо за поставив меня на правильном пути! Тем не менее, я все еще получаю «незарегистрированные (производные) классы» ошибки, если я помещаю их только в один файл CPP. – Max

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