2013-03-25 52 views
1

我有一個包含指向另一個類的對象的指針集合的類。 基本上它看起來是這樣的:將方法傳遞給包含對象指針的集合的所有元素,C++

class connectionSLOT: private std::set<connectionSLOT*> 
{ 
... 
}; 

這很簡單,工作正常表示(導演)圖,也許。我的類還包含一些簡單的方法,如connect(),disconnect()等,他們都希望對象指針作爲參數,並返回這樣的指針。 (即它們的聲明在其名稱中唯一有所不同) 例如:

connectionSLOT* connectionSLOT::connect(connectionSLOT *A) 
{ 
    insert (A); return A; 
} 

或者:

connectionSLOT* connectionSLOT::disconnect(connectionSLOT *A) 
{ 
    erase(A); return this; 
} 

所以,我的問題是:如何才能讓這些應用不能在這些功能的新方法對象本身,但集合中包含的所有對象(即包含在調用對象中)?

我想有這樣的事情:

connectionSLOT* new_method('passing a method (and its argument) ') 
{ 
    for(it=begin();it!=end();++it) 'execute the method on (*it)' ; 
    return something; 
} 

這將適用於所有的鄰居點連接到特定的頂點,也許。 但由於NEW_METHOD()本身也是應有的功能它可以通過太:

int main() 
{ 
    // ... here declaring some objects and connection amongst them... 

    A->new_method(new_method(disconnect(B))) ; 

/* calling new_method() recursively to disconnect all the vertices from B which ones are 
    reachable from A in two steps */ 

... 
} 

我希望,有可能以某種方式做。 (語法基本上不重要) 感謝任何建議。

Robert

回答

0

您可以使用C++ 11嗎?我相信,std::function和lambda表達式就是你正在尋找的。

void DoSth(std::function<void(void)> fn) 
{ 
    fn(); 
} 

DoSth([]() { printf("Hello, world!\n"); }); 

您的代碼看起來更不像如下:

connectionSLOT::new_method(std::function<void(connectionSlot *)> fn) 
{ 
    for (it = begin(); it != end(); ++it) 
     fn(*it); 

    return something; 
} 

int main() 
{ 
    // ... here declaring some objects and connection amongst them... 

    A->new_method([](connectionSlot * B) { disconnect(B); }); 

    // ... 
} 
+0

哇!感謝您的快速回答!是的,我使用該版本(使用gnu C++編譯器),您的解決方案正是我需要的! :) 非常感謝! – 2013-03-25 07:44:44

相關問題