Я хочу специализировать шаблонную функцию, объявленную как:
template<typename Type> Type read(std::istream& is);
У меня тогда много статических реализаций
static int read_integer(std::istream& is);
a.s.o. Теперь я хотел бы сделать макрос, чтобы специализация чтения была такой простой:
SPECIALIZE_READ(read_integer)
Так что я решил пойти по пути boost :: function_traits и объявить SPECIALIZE_READ как:
#define SPECIALIZE_READ(read_function) \
template<> boost::function_traits<read_function>::result_type read(std::istream& is) { \
return read_function(is); \
}
но компилятор VC ++ (2008) жалуется на: 'boost :: function_traits': 'read_integer' не является допустимым аргументом типа шаблона для параметра 'Function'
Идеи?