Я пытаюсь узнать, как наилучшим образом использовать функции std :: function и std :: bind в стандартной библиотеке - меня интересуют версии TR1, поскольку это то, что у меня есть на данный момент, и я 'я не знаю различий, если таковые имеются, между реализациями TR1 и реализациями C ++ 11.
Поэтому для упражнения я настроил создание простого, скажем, «диспетчера».Я хочу иметь возможность выполнять любую функцию от диспетчера на основе некоторых решений, принятых позже во время выполнения.Я установил в своем классе элемент данных общей функции, например, так:
class PoorDispatcher
{
...
private:
std::tr1::function<void()> m_f;
}
Затем я назначаю элементу данных функцию, которую я действительно хочу вызвать, аналогично приведенному ниже
...
m_f = std::tr1::bind(some_func, param1, param2, param3);
...
// then the call
m_f(); // SUCCESS
Вышеуказанное позволяет мне успешно вызвать нужную функцию, но я не уверен, что это правильно.Вопросы:
- Является ли приведенный выше сценарий использования "нормальным"?Есть ли лучшие альтернативы?
- Приведенный выше метод создает проблему при попытке привязки к функции, которая возвращает что-то.Как я могу получить возвращаемое значение?(Из-за своей глупости я устала разыгрывать функциональные объекты без особого успеха)