fork(3) download
  1.  
  2. #include <iostream>
  3.  
  4. template <class MemPtr, MemPtr p>
  5. struct Accessor {
  6. static MemPtr value() {
  7. return p;
  8. }
  9. };
  10.  
  11. // ------------------------------------------------------
  12. // Target Class
  13. // privateメンバにアクセスされるクラス
  14. struct A {
  15. A(int mem1, int mem2):mem1(mem1), mem2(mem2) {}
  16. void print() const {
  17. std::cout << "mem1 = " << mem1 << " mem2 = " << mem2 << std::endl;
  18. }
  19. int mem1;
  20. int mem2;
  21. };
  22.  
  23. int main() {
  24. A a(1, 2);
  25. // メンバポインタを経由してのアクセス
  26. std::cout << a.*&A::mem2 << std::endl;
  27. // Accessorを経由して (設定済みの )mem にアクセス
  28. std::cout << a.*Accessor<int A::*, &A::mem1>::value() << std::endl;
  29. std::cout << a.*Accessor<int A::*, &A::mem2>::value() << std::endl;
  30. a.*Accessor<int A::*, &A::mem1>::value() = 3;
  31. a.*Accessor<int A::*, &A::mem2>::value() = 4;
  32. a.print();
  33. }
  34. // Output:
  35. /*
  36. 2
  37. 1
  38. 2
  39. mem1 = 3 mem2 = 4
  40. */
  41.  
Success #stdin #stdout 0.02s 2724KB
stdin
Standard input is empty
stdout
2
1
2
mem1 = 3 mem2 = 4