Скажем, у меня есть N
функции, которые имеют одинаковый набор аргументов. Я вызываю фабричный метод с аргументами и некоторым значением, которое позволяет мне выбирать между N
функциями.
Неопрятный подход состоит в том, чтобы делать оператор if следующим образом:
if(choice == 1)
foo_one<T>(args);
else if (choice == 2)
foo_two<T>(args);
etc
Это нормально, за исключением моего случая, когда количество аргументов велико. Таким образом, заводской метод очень переполнен.
Скажем, у меня есть основная функция, которая вызывает фабричный метод:
int main(int argc, char *argv[])
{
int choice = 1;
float arg = 1.5;
foo_choose(choice, arg);
return 0;
}
Я имею в виду ветвление аргумента choice
и оператора if, устанавливающего псевдоним функции.
Это означает, что мне нужно будет передать свои аргументы только один раз, независимо от того, насколько велик N
.
Это может выглядеть примерно так:
template <typename T>
void foo_one(T arg) { std::cout << "foo_one\n"; };
template <typename T>
void foo_two(T arg) { std::cout << "foo_one\n"; };
template <typename T>
void foo_choose(int choice, T arg)
{
if(choice == 1)
using foo = foo_one<T>;
else
using foo = foo_two<T>;
foo(arg);
};
Однако я не могу заставить это работать с шаблонами. Есть ли что-то очевидное, что я упускаю, или поисковый термин, который я должен добавить.
Поскольку я мог бы вызывать foo_choose
несколько раз с различными значениями для choice
, я бы не хотел, чтобы псевдоним foo
существовал вне области действия функции.
Этот вопрос предполагает возможно, я не на том пути, но я не уверен.