給定一個Event
結構和一個對象,該對象實現了一個具有特定名稱和原型的函數,該函數結構爲Event
,我想返回一個指針或綁定到該函數。究竟它返回的並不重要;它可以像指向成員函數或綁定一樣容易。給定一個T和函數名稱和類型,如何解析T :: function?
這是一個有點難以解釋,所以這裏的一些僞代碼:
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++太有限允許這樣做?
請回答
我不是在尋找反射之前閱讀。據我所知,所有需要做的事情都是在編譯時提供的。
另外,我對替代方法不感興趣。我知道有很多方法可以通過額外的代碼實現這種行爲,比如每種事件類型的模板特化,但我正在尋找一種專門實現這一點的方法。
不能完成。我想* C++對你來說太有限了。 – 2012-08-10 18:22:02
你聲稱你對替代品不感興趣,但我仍然說你可能正在遭受XY問題的困擾。特別是考慮你試圖用什麼是範圍解析運算符來表達什麼,它使用標識符而不是類型。 – 2012-08-10 18:26:13
我有100個'Event'結構。我有一個'EventHandler'對象,當事件'T'被引發時,給它一個回調函數。我希望能夠傳遞一個對象,並讓編譯器爲我解析'T :: onEventType'。 –
2012-08-10 18:29:15