Я написал шаблон функции для сериализации перечислений в / из нашего класса потока (да, я знаю boost :: serialization, но в моей ситуации это не вариант). В нашей компании перечисления по соглашению сериализуются как int
:
template<typename T>
Stream& operator<<( Stream& s, T const& value )
{
s << ( int ) value;
}
template<typename T>
Stream& operator>>( Stream& s, T & value )
{
int v;
s >> v;
value = (T) v;
}
Это простые шаблоны, и они также хорошо работают в моих шаблонах функций для (де) сериализации вектора элементов перечисления. Однако меня беспокоит то, что они слишком общие, т.е. что они применяются также к типам T
, которые не являются enums
, но могут быть преобразованы в / из int
. Могу ли я улучшить шаблоны enum-сериализации (или, может быть, шаблоны векторной сериализации), чтобы убедиться, что они применяются только к векторам enum
s?