Я довольно новичок в C++, и я пытаюсь добиться чего-то немного сложного, для которого я не могу найти подходящего решения.Создание экземпляра шаблона и выбор функции во время выполнения
Скажем, у меня есть эти две функции:
template <class T1, class T2> void foo(T1 param1, T2 param2){...};
template <class T1, class T2> void bar(T1 param1, T2 param2){...};
И во время выполнения, я хочу, чтобы выбрать на этих двух функций, и создать его экземпляр с некоторыми типами шаблонов, полученных из пользовательского ввода, скажем полукокса c
, Так что я мог бы сделать что-то вроде:
double d;
float f;
switch(c) {
case 'a':
foo(d, f); break;
case 'b':
foo(f, d); break;
case 'c':
bar(d, f); break;
case 'd':
bar(f, d); break;
Но это решение некрасиво, не масштабируется (я хочу, чтобы иметь возможность добавить больше функций и больше параметров шаблона) и т.д. А также, я не могу видеть, способ присвоить одну из функций foo
или bar
указателю функции, поскольку параметры шаблона неизвестны до выполнения.
Так что если кто-то может предоставить мне хорошее, чистое решение этой проблемы, я был бы очень счастлив! Приветствия.
Редактировать Позвольте мне пояснить несколько вещей.
Я доступа двоичные файлы, в которых данные могут быть сохранены как floats
или doubles
. Очевидно, что программа не знает этого типа, поэтому пользователь должен каким-то образом указать ее.
Затем некоторые математические вычисления должны выполняться на данных, загружаемых из файла. И возможно несколько таких вычислений, представленных выше функциями foo
и bar
.
Так что я хотел бы, чтобы пользователь имел возможность указать тип данных в файле во время выполнения, а затем выберите функцию, чтобы применить к загруженным данным во время выполнения слишком. switch(c)
был просто иллюстрацией того, как я думал, что пользователь может выбрать такие вещи.
вы можете дать некоторый фон на том, что это вы пытаетесь достичь? –
Что такое шаблон, которому должны следовать вызовы (по отношению к 'c')? – Columbo
Шаблоны не работают во время выполнения. Вы можете создать 'unordered_map' и вызвать это на основе ключа. –