Мне нужно разрешить пользователю изменять элементы двух структур данных одного типа одновременно. Например:
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
изменено.