Я пытаюсь узнать, как наилучшим образом использовать std :: function и std :: bind объекты в стандартной библиотеке - меня интересуют версии TR1, так как у меня есть , и теперь я не знаю различий между реализациями TR1 и C++ 11.std :: tr1 :: назначение функции и привязка
Так что ради упражнения, которое я создал, чтобы построить простой, скажем, «диспетчер». Я хочу, чтобы иметь возможность выполнять любую функцию диспетчера на основе некоторых решений, принятых позже во время выполнения. Я создал свой класс, чтобы иметь общие данные функции члена, как так:
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
выше, позволяет мне успешно выполнить функцию, которую я хочу, но я не уверен, что это правильно. Вопросы:
- Является ли приведенный выше сценарий использования «нормальным»? Есть ли лучшие альтернативы?
- Вышеуказанный метод создает проблему при попытке привязки к функции, которая возвращает что-то. Как получить возвращаемое значение? (В моей глупости я устал бросать объекты функции без особого успеха)
Я знаю, что это фактический тип функции. Если я использую bind, вызов функции будет работать, и он вызовет мою функцию с аргументами, хотя m_f имеет тип «void()». Я не могу использовать boost, я должен придерживаться TR1. Я хочу избежать создания нового объекта функции, если это возможно. – celavek