사용자가 동일한 유형의 두 데이터 구조의 멤버를 동시에 변경할 수 있도록 허용해야합니다. 예를 들면 다음과 같습니다.C++의 "Automatic"클래스 프록시
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)를 작동시킬 수는 있지만 여러 단계에서보기 흉한 것으로 생각됩니다. –
슬프게도! 이 질문은 직접적으로가 아니라 내 사용자의 요구 사항에서 비롯되었습니다. 첫 번째 종류 만 허용하면 보일러 플레이트 코드가 약 50 % 절약됩니다. – PierreBdR