2012-08-05 86 views
0

「()」我有一個模板類,其中類型名稱是指向一個功能:操作模板類

CHook<NTSTATUS(__stdcall*)(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,HANDLE,PCLIENT_ID,PCONTEXT,PUSER_STACK,BOOLEAN)> hZwCreateThread;

現在我把他們像hZwCreateThread.Call()(... PARAMS。 ..);但我想使用()運算符重載使它成爲hZwCreateThread(... params ...)。 此代碼:

const FuncType operator()() { return m_OrigFunc; }; 

使得它只有在這樣的工作方式:hZwCreateThread()(...參數...)。如何讓它像我上面寫的那樣工作?

回答

2

您可以使用轉換操作符。

template <typename F> 
struct CHook { 
    F m_OrigFunc; 
    CHook (F func) : m_OrigFunc(func) {} 
    operator F() const { return m_OrigFunc; } 
}; 

這將允許這樣的代碼:

CHook<int(*)(const char *,...)> chook(printf); 
chook("%s\n", "Hello world!");