2013-05-08 25 views
1

我編碼一些東西在C++,和往常一樣,我們有一些「想法」如果在語言中存在類似的東西...C++新的對象作爲參數(和Java一樣)

我現在,隨着對作爲參數傳遞的對象有懷疑。

我總是這樣做,是創建一個新的對象,並通過它的實例作爲一個指針,就像這樣:

mObject* obj1 = new mObject(); 
obj1->callback(the_callback_function); 

function_that_needs_obj(obj1); // (or the reference, if I didn't instantiated a pointer). 

這是確定的,工作OK,沒有問題與此有關。但是,正如我使用Java,我曾經這樣做:

function_that_needs_obj(new mObject(){ 
    public void onCallback(){ 
     // Custom code enters here.... 
    } 
}); 

是否有任何「排序」在C++中使用這樣的?因爲對於我需要創建的EACH回調:一個Extended class或一個functionNamedVeryLongBecauseThereAreMany必須寫在代碼的TOP上,並且這種「混淆」了很多代碼...

而且,所有Object變量,而無法訪問低谷this如果我assing一個回調函數...

+2

C++中的回調更容易。只要採取任何可調用類型並傳遞lambda。 – chris 2013-05-08 03:20:48

+0

@chris,在「實現」回調中沒有問題,這只是一個強化代碼的問題......如果我向新對象發送可調用類型,則可調用類型將無法「訪問」對象數據,只有它使用全局範圍。 – 2013-05-08 03:23:33

+0

對不起...我不是英國本地人...... – 2013-05-08 03:32:06

回答

4

,如果你的編譯器支持C++ 11,你可以使用lambda表達式是這樣的:

function_that_needs_obj([]() 
         { 
          // Custom code enters here.... 
         }); 

What is a lambda expression in C++11?

+0

你知道我是如何讓它爲Arduino編譯器工作的嗎? – 2013-05-09 03:05:15

+0

對不起,我從來沒有聽說過編譯器 – 2013-05-15 03:58:55

+0

「Arduino」其實不是編譯器,它使用GCC,但是有什麼方法可以「啓用」嗎? – 2013-05-15 04:01:27

0

你可以在boost lambda中找到你需要的東西!

相關問題