我需要允許用戶同時更改兩個相同類型數據結構的成員。例如:C++中的「自動」類代理
struct Foo { int a, b; }
Foo a1 = {1,2}, a2 = {3,4};
dual(a1,a2)->a = 5;
// Now a1 = {5,2} and a2 = {5,2}
我有一個類可以工作,並且首先更改a1,然後將a1複製到a2中。
- 類複製小
- 用戶不介意一切被複制,不僅是部分修改:這隻要是好的。
有沒有辦法獲得這種行爲:
dual(a1,a2)->a = 5;
// Now a1 = {5,2} and a2 = {5,4}
我打開替代語法,但他們應該保持簡單,我想避免的東西,如:
set_members(a1, a2, &Foo::a, 5);
members(a1, a2, &Foo::a) = 5;
或任何涉及指定明確&Foo::
[編輯]
我應該更精確。重點是與圖形庫一起工作。該庫工作在有向圖上,但是使用規定給定兩個頂點v1和v2,如果存在邊緣v1-> v2,則會出現邊緣v2-> v1。這兩個邊緣往往(但並非總是)具有相同的屬性。因此,當前實現現在允許:
G.edge(v1,v2)->b = 5; // Only v1->v2 is modified
G.arc(v1,v2)->a = 10;
// Now G.edge(v2,v1) is set to G.edge(v1,v2) after the modification a = 10 (i.e. b = 5 too)
而且我想符號暗示僅a
被修改。
這真的是這樣一個共同的要求,你覺得有必要簡化它嗎?我懷疑可能有更好的方法去做任何你想完成的事情。 至於實際的問題,我沒有看到這樣做的方式,允許一個很好的語法。使用宏可以使set_members(a1,a2,a,5)有效,但我認爲這在許多層面上都很難看。 – 2010-05-11 03:18:54
不幸的是!這個問題來自我的用戶的要求,而不是直接來自我的要求。只允許第一種節省大約50%的鍋爐代碼。 – PierreBdR 2010-05-11 08:16:29