имя функции шаблона в терминах аргумента шаблона
Я искал примеры, касающиеся моего вопроса, и я до сих пор не могу найти решение. Ближайшая вещь, которую ямы нашли это
Функция шаблона в качестве аргумента шаблона
Я постараюсь опубликовать рабочий пример на случай, если он понадобится, но пока часть моего кода включает в себя следующее:
template
inline void write_info(InterfaceType& interface, T& t) {
InterfaceType::write_info(interface, t);
}
template
inline void write_data(InterfaceType& interface, T& t) {
InterfaceType::write_data(interface, t);
}
template
inline void write_definition(InterfaceType& interface, T& t) {
InterfaceType::write_definition(interface, t);
}
Обратите внимание, что шаблоныwrite_info
зависит от типа интерфейса, который имеет метод с именемwrite_info
(Статический метод). Это сделано потому, чтоwrite_info
функция может быть позже специализирована для определенного типа данных без необходимости переопределять что-либо для.InterfaceType
Простой вопрос: можем ли мы уменьшить приведенный выше код с помощью шаблона, который называет функцию параметром функции? Имейте в виду, что я действительно хочу, чтобы это было возможно, чтобы я мог избежать определения всех этих трех функций для специализированного типа данных, т.е.
Предположим, чтоfoo
это структура с двумя атрибутамиint a
а такжеdouble b
, Тогда я могу специализировать вышеупомянутые функции следующим образом:
template
inline void write_info(InterfaceType& interface, foo& t) {
InterfaceType::write_info(interface, t.a);
InterfaceType::write_info(interface, t.b);
}
template
inline void write_data(InterfaceType& interface, foo& t) {
InterfaceType::write_data(interface, t.a);
InterfaceType::write_data(interface, t.b);
}
template
inline void write_definition(InterfaceType& interface, foo& t) {
InterfaceType::write_definition(interface, t.a);
InterfaceType::write_definition(interface, t.b);
}
Как вы можете видеть, яЯ пишу один и тот же код снова и снова. Здесь я'м, предполагая, что InterfaceType уже имеет определение,write_info
write_data
а такжеwrite_definition
заint
а такжеdouble
, Есть идеи?