Если у меня был класс Foo
, с несколькими шаблонами функций и хотелось бы создать экземпляр для ряда других типов A, B, C
в своем файле cpp, в настоящее время мне приходится писать каждый один, это может быть подвержено ошибкам, если я хочу добавить или удалить тип, и это просто раздражает, чтобы обновлять каждый раз. Есть ли какие-либо макро-трюки или методы метапрограммирования, которые могли бы помочь?Удобные решения для создания последовательности шаблонных функций или классов
Что-то вроде:
//Foo cpp
template <typename T>
T Foo::add(T t0, T 01) {
return t0 + t1;
}
INSTANTIATE_TEMPLATE(Foo::add, A, B, C)
Что бы произвести:
template A Foo::add<A>(A t0, A t1);
template B Foo::add<B>(B t0, B t1);
template C Foo::add<C>(C t0, C t1);
Are реализации всех экземпляры одинаковы? Потому что, если они вам не нужно объявлять их для каждого типа. Если вы хотите функцию удобства, чем создает экземпляр шаблона для каждого типа, то реализации должны быть одинаковыми. – Kerndog73
Реализации все одинаковы, но (исправьте меня, если я ошибаюсь) Мне все равно нужно объявить их таким образом, чтобы они использовались для библиотеки/извне. – Brian
Вам не нужно. Если шаблон находится в файле заголовка, он будет создан для каждого типа при первом использовании. Таким образом, 'Foo :: add ' будет создан при первом вызове имени, где он называется. – Kerndog73