Я пишу простые данные для XML-сериализатора для целей обучения. Идея состоит в передаче значений функции сериализации, которая будет делать что-то, чтобы привести данные значения в строковый формат. Многие типы имеют встроенные преобразования, но для многих я хочу, чтобы у вас была специализированная функция. Мой подход:Специализация функции шаблона с общим классом
У меня есть шаблон функции с этой подписью:
template <class T> void serialize(T *value, Serializer *serializer);
и я могу специализировать шаблон:
template <> void serialize<bool>(bool *value, Serializer *serializer);
работает отлично. Теперь я хочу, чтобы написать функцию сериализации для вектора, как:
template <class T> void serialize<std::vector<T*> >(std::vector<T*> *value, Serializer *serializer) {
serializer->begin_section("array");
for(std::vector<T*>::iterator it = value->begin(); it != value->end(); it++) {
serializer->add_value(*it);
}
serializer->end_section();
}
Но когда я скомпилировать его (г ++ 4.6.2), я получаю error: function template partial specialization ‘serialize<std::vector<T*> >’ is not allowed
. Есть ли способ, которым я могу это сделать?