Как автоматически создавать экземпляры функций шаблонаC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как автоматически создавать экземпляры функций шаблона

Сообщение Anonymous »

У меня есть несколько функций шаблона только с одним параметром шаблона.

Код: Выделить всё

// 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);
Тривиальный способ работает. Однако, если я хочу поддерживать четвертый тип, мне нужно будет изменить все исходные файлы (add.cpp, func1.cpp и func2.cpp в приведенном выше примере).
Я хочу автоматически явно создавать экземпляры этих функций шаблона со всеми поддерживаемыми типами. Код ниже демонстрирует то, что я хочу сделать, но он недействителен.

Код: Выделить всё

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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»