У меня есть программа на С ++, в которой я:
- Иметь класс, который содержит в качестве членов дескрипторы функций, скажем,
void (*foo)
и void (*bar)
- Иметь набор пространств имен, каждое из которых определяет функции с одинаковыми именами, например:
namespace1
содержит функции void foo()
и void bar()
namespace2
также содержит функции void foo()
и void bar()
Во время выполнения я бы хотел, чтобы пользователь мог передавать переменную, скажем, choice
, которая указывает выбранное пространство имен. Функции в классе будут затем сопоставлены с соответствующими функциями в соответствующем пространстве имен.
В настоящее время я использую что-то вроде следующего:
if (choice == "namespace1") {
my_class.foo = &(namespace1::foo);
my_class.bar = &(namespace1::bar);
} else if (choice == "namespace2") {
my_class.foo = &(namespace2::foo);
my_class.bar = &(namespace2::bar);
}
Это работает хорошо, но становится довольно громоздким, когда мой список доступных пространств имен увеличивается, и учитывая, что каждое пространство имен предоставляет 9 функций, которые я хотел бы передать в класс.
Есть ли способы, которыми я могу привести это в порядок? Моей первой мыслью было что-то вроде:
if (choice == "namespace1") {
my_namespace = namespace1;
} else if (choice == "namespace2") {
my_namespace = namespace2;
}
my_class.foo = &(my_namespace::foo);
my_class.bar = &(my_namespace::bar);
Но, если я правильно понимаю, я не могу использовать пространства имен в качестве переменных.
Есть ли лучший способ сформулировать это? Как это структурировано, это плохой стиль и есть ли более стандартный способ сделать это?
Спасибо за ваши идеи!