Функтор для выбора между двумя функциями

Синтаксис поиска в гугле для C ++ приносит много разных результатов, и я не думаю, что вижу необходимость в любом из них. Некоторые используют шаблоны, некоторые используют один класс, другие — несколько, а третьи используют структуры. Я никогда не уверен, какие конкретные элементы мне нужны для того, что я хочу сделать. Итак, что я хочу сделать:

У меня есть две функции. Они оба принимают одни и те же параметры, но имеют разные имена и будут возвращать другой результат, хотя тип возвращаемого значения также одинаков, например,

unsigned foo1(char *start, char *end);
unsigned foo2(char *start, char *end);

Я просто хочу выбрать, какую функцию вызывать в зависимости от значения логической переменной. Я мог бы просто написать предикат, чтобы выбрать между ними, но это не кажется элегантным решением. Если бы это был C, я бы использовал простой указатель на функцию, но мне советовали, что они плохо работают в C ++.

Изменить: Из-за ограничений вне моего контроля, в этом сценарии я не могу использовать C ++ 11.

2

Решение

Просто используйте 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 является более гибким.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]