前提・実現したいこと
次のようなコードで関数 fからプライベートメンバにアクセスできません。
どのようにすると良いのか,お知恵をお願いします。
該当のソースコード
C++
1template<typename T> 2class A{ 3 T a; 4public: 5 A(T a):a{a}{} 6 void f(A<T*> p){a=*p.a;}///ここでエラー 7};
試したこと
クラスA同士のことなので,そもそもプライベートメンバにアクセスできない理由がわかりません。A<T>とA<T*>は別のクラスということが原因かと思い,以下の部分特殊化をしてみたのですが,使い方がよくわかりません。おそらくfriendを使うと思うのですが,わかりませんでした。
C++
1template<typename T> 2class A<T*>{ 3 T* a; 4 A(T* a):a{a}{} 5}; 6
ポインタ使ってませんがやりたいことの流れはこういうことで合っていますか?
https://paiza.io/projects/riMGJbioxvqn3wgxp5D25A?language=cpp
早速,ご検討ありがとうございます。やりたいことは,このコードで良いですが,関数f内ではポインタ経由であることが必要です。
ポインタ経由であることが必要の理由が分かりませんが、C++なら参照渡しで良いのでは?
(必要な理由が分からない素人の思う素朴な疑問なので他意はありませんあしからず)
https://paiza.io/projects/riMGJbioxvqn3wgxp5D25A?language=cpp
void f(const A<T> &p) { a = p.a; }
aa.f(bb);
ありがとうございます。正確でなかったので改めて説明しますと,ポインタ経由というより,A<T*>で渡されることが,マストです。次のような FooクラスとFooのメンバを参照するFooRefクラスがあり,Foo内部で両者のメンバの演算をf関数で行うということを実現したいことです。a.f(r)の部分が質問とした演算の部分です。
```
template<typename T>
class FooRef{
A<T*> a;
};
template<typename T>
class Foo{
A<T> a;
void f(FooRef<T>& r){
a.f(r);
}
};
```
部分特殊化ということが何かも知らずコメントして失礼しました。
素人の私が回答できる範疇を超えているので良い回答がつくことを期待してクリップさせて頂きます。
https://mimosa-pudica.net/cpp-specialization.html
回答1件
あなたの回答
tips
プレビュー