Представьте, что у меня есть следующая свободная функция и функтор:
void myFreeFunction(void)
{
cout << "Executing free function" << endl;
}
struct MyFunctor
{
void operator()(void)
{
cout << "Executing functor" << endl;
}
};
Как описано в этом ответе, я могу передать свою функцию или функтор в качестве шаблона аргумент другой функции:
template
void doOperation(F f)
{
f();
}
А затем вызов:
doOperation(myFreeFunction);
doOperation(MyFunctor());
Пока все хорошо. Но что, если я хочу что-то вроде следующего:
template
class MyClass
{
private:
Callback mCallback;
public:
MyClass(){}
void execute()
{
mCallback();
}
};
В этом случае я указываю функцию/функтор, когда объявляю класс, но не вызываю его до тех пор, пока позже. Это работает для функторов:
MyClass myClass1;
myClass1.execute();
Но не для функций:
MyClass myClass2;
myClass2.execute();
Компилятор говорит:
ошибка C2923: 'MyClass' : 'myFreeFunction' не является допустимым аргументом типа шаблона для параметра 'Callback'
Что справедливо достаточно... но как бы вы это структурировали?
Примечание: Я знаю о std::function и в конечном итоге могу использовать это. Это заметно медленнее, поэтому я рассматриваю все варианты.
Спасибо,
Дэвид