Код: Выделить всё
// add.cpp
template
T add(T a, T b) {
// do something
}
Код: Выделить всё
// func1.cpp
template
void func1(int n) {
T t;
// do something
}
Код: Выделить всё
// func2.cpp
template
void func2(ClassHasNoDefaultConstructor c) {
T t;
// do something
}
// Some template functions will be added in the future
Код: Выделить всё
// add.cpp
int add(int, int);
double add(double, double);
std::complex add(std::complex, std::complex);
Код: Выделить всё
// func1.cpp
void func1(int);
void func1(int);
void func1(int);
Код: Выделить всё
// func2.cpp
void func2(ClassHasNoDefaultConstructor);
void func2(ClassHasNoDefaultConstructor);
void func2(ClassHasNoDefaultConstructor);
Я хочу автоматически явно создавать экземпляры этих функций шаблона со всеми поддерживаемыми типами. Код ниже демонстрирует то, что я хочу сделать, но он недействителен.
Код: Выделить всё
template
class Instantiate{
static constexpr auto f_int = Func;
static constexpr auto f_double = Func;
static constexpr auto f_complex = Func;
};
// The lines below throw compile errors because functions cannot be the template template parameters
Instantiate;
Instantiate;
Instantiate;
// ...
Я знаю, что определение функций шаблона в исходных файлах — это странная практика, однако эта практика значительно сокращает время компиляции при изменении определения функции в моем случае.
Есть несколько сообщений о создании экземпляров шаблонных функций, но они не то, что мне нужно.
- Функция шаблона как аргумент шаблона
- Автоматизация явного создания экземпляра шаблона
Подробнее здесь: https://stackoverflow.com/questions/791 ... -functions
Мобильная версия