沒有簡單這樣做的方式,如最初內置於語言或標準庫(儘管它最近已添加)。如果您熟悉Boost,他們將包含一個解決方案 - Boost.Function。
如果由於某種原因,但是,你不能或不願使用Boost,有這樣使用模板(其中,不可否認,是相當類似升壓轉換器的解決方案)的通用方法:
class FncPtr
{
public:
virtual int call(float, char, char) = 0;
};
template <typename T>
class ClassFncPtr : public FncPtr
{
int (T::*pt2Member)(float, char, char);
T *inst;
public:
ClassFncPtr(T* who, int (T::*memfunc)(float,char,char))
: inst(who), pt2Member(memfunc)
{
}
int call(float a, char b, char c)
{
return (inst->*pt2Member)(a,b,c);
}
};
template <typename T>
FncPtr * makeFuncPointer(T* who, int (T::*memfunc)(float,char,char))
{
return new ClassFncPtr<T>(who,memfunc);
}
如果您願意,您還可以繼承FncPtr
以便能夠使用非類功能。
六十億重複。 – Puppy
@DeadMG:顯示他們:)我的計數器停留在2,178,933個問題總計 – sehe
您稍後調用它時會使用什麼參數? – Beta