Синтаксис поиска в гугле для C ++ приносит много разных результатов, и я не думаю, что вижу необходимость в любом из них. Некоторые используют шаблоны, некоторые используют один класс, другие — несколько, а третьи используют структуры. Я никогда не уверен, какие конкретные элементы мне нужны для того, что я хочу сделать. Итак, что я хочу сделать:
У меня есть две функции. Они оба принимают одни и те же параметры, но имеют разные имена и будут возвращать другой результат, хотя тип возвращаемого значения также одинаков, например,
unsigned foo1(char *start, char *end);
unsigned foo2(char *start, char *end);
Я просто хочу выбрать, какую функцию вызывать в зависимости от значения логической переменной. Я мог бы просто написать предикат, чтобы выбрать между ними, но это не кажется элегантным решением. Если бы это был C, я бы использовал простой указатель на функцию, но мне советовали, что они плохо работают в C ++.
Изменить: Из-за ограничений вне моего контроля, в этом сценарии я не могу использовать C ++ 11.
Просто используйте std::function
:
std::function<unsigned int(char*, char*)> func = condition ? foo1 : foo2;
// ^^^^^^^^^^^^^^^^^^^^^^^^^^ function signature
// ...
unsigned int result = func(start, end);
Кроме того, указатели на функции прекрасно работают в C ++:
auto func = condition ? foo1 : foo2;
unsigned int result = func(start, end);
Но std::function
является более гибким.
Других решений пока нет …