是否有可能從模板中存儲類而不使整個類成爲模板?模板和函數指針
任務:
我有兩個功能,V1無參數和參數V2, 如果V1被稱爲地方什麼也沒有發生與使用(),如果V2被稱爲地方使用()應執行function_ptr與我從DoSometh(T *)獲得的實例。
例如
class MyClass
{
//v1 no parameters
void DoSomething()
{
}
//v2 with parameter
template<class T>
void DoSomething(T* instance, void (T::*func)())
{
store somewhere?? = instance;
}
void Use()
{
//if DoSometh(T* instance) was used before
if(instance != NULL)
{
(*instance->)//call function pointer from DoSomething(T*,void (T::*)())
}
}
}
std::function problem
update:
class Timer : public ITickable
{
std::function<void()> test; //adding this does weird things
virtual void Tick() {}
}
class MyClass
{
ITickable* tickable_;
void Tick()
{
tickable_->Tick(); //let's assume it points to a Timer obj.
}
}
你*有*使用函數指針?你不能使用標準庫用於所有可調用函數的模板嗎?然後,您可以傳遞一個'std :: function'對象,泛型函數對象,'std :: bind'對象,普通(或靜態成員)函數指針和lambda表達式,而不用擔心實例或存儲信息。 –
'void *'或者甚至更好 - 'ParentInterface *' – Amartel
顯示一個真實的用例示例。看起來好像可能有更好的解決方案。 –