2016-07-03 98 views
1

我有一些C++代碼,我不能改變,只能通過改變頭文件。我有代碼並可以編譯它。C++宏定義包括點?

的問題是,我有一個函數指針的定義是這樣的(函數指針是那種無關,我想做的事情):

foo.bar(); 

我想改變與宏或東西:

#define foo.bar() FunCall() 

問題據我所知,它是不可能在宏中使用點,有沒有其他方式?

編輯:

更多信息。我得到的代碼旨在運行單個實例,但是我正在封裝代碼以在類中運行多個實例。這讓我有些頭痛,我試圖結束。

我試圖要麼是使用宏和一些內聯函數或完整的第三種方式:

void function() 
{ 
    foo.bar(); 
} 

我需要一些代碼,可以使上述等同於:

void class::function() 
{ 
    EventFuncTypedef f = foo.bar; 
    (this->*f)(); 
} 

或者

void class::function() 
{ 
    class::FunCall(); 
} 

以上所有代碼的工作問題是嘗試獲取由原點執行的選項1或2代碼。

+1

做一個'struct'與功能'欄()'和'FunCall實現()',並創建一個全局變量'foo'。然後'foo.bar()'變成對'FunCall()'的函數調用。可以嗎? – Mine

+2

你不能擺脫點。你只能以一種或多或少創造性的方式來使用它。 –

+0

嚴格是不可能的,那實際上已經存在。我得到的代碼被創建爲作爲單個實例運行,我試圖將整個代碼包裝到多個實例的類中。這使成員函數指針變得複雜。我試圖想出新的創造性方法來包裝它 – ThomasG

回答

0

與宏和幫手:

struct FunCaller { 
    static auto bar() {FunCall();} 
}; 

#define foo FunCaller{} 
+0

對不起沒有提到我把它全部包裝在課堂上。但也許這仍然會工作?我無法預見上述的後果,但會嘗試或類似的。 – ThomasG

+0

我懷疑這是可以推廣到足以有用... –