给定一个Event
结构和一个实现具有特定名称和原型的函数的对象,该Event
结构已知,我想返回一个指针或绑定到该函数。它返回的究竟是什么并不重要。它可以很容易地成为指向成员函数的指针或绑定。
这有点难以解释,所以这里有一些伪代码:
struct Foo {
void onEvent();
};
struct Bar {
void onEvent();
};
struct Event
{
// I'm not sure what would go here
// Needs something that can be used to resolve T::onEvent, without
// knowing what T is until GetEventFunction is called.
typedef std::function<void()> function_type;
};
template<typename T, typename EventType>
EventType::function_type GetEventFunction(T* object)
{
return std::bind(T::(EventType::Something), object);
}
GetEventFunction<Foo, Event>(new Foo); // Returns Foo::onEvent
GetEventFunction<Bar, Event>(new Bar); // Returns Bar::onEvent
可以实现这种行为,还是 C++ 过于受限而不允许这样做?
请在回答前阅读此内容
我不是在寻找反思。据我所知,完成我的目标所需的所有信息都在编译时可用。
另外,我对替代方法不感兴趣。我知道通过附加代码实现此行为的许多方法,例如每种事件类型的模板特化,但我正在寻找一种专门实现此目的的方法。