回答編集履歴
1
特殊化する場合の例を追加
answer
CHANGED
|
@@ -13,4 +13,26 @@
|
|
|
13
13
|
A(T a):a{a}{}
|
|
14
14
|
void f(A<T*> p){a=*p.a;}
|
|
15
15
|
};
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
特殊化するのであれば `friend` 宣言は `A<T*>` の方にすればよいですね。
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
#include <type_traits>
|
|
22
|
+
|
|
23
|
+
template<typename T>
|
|
24
|
+
class A{
|
|
25
|
+
T a;
|
|
26
|
+
public:
|
|
27
|
+
A(T a):a{a}{}
|
|
28
|
+
void f(A<T*> p){a=*p.a;}
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
template<typename T>
|
|
32
|
+
class A<T*> {
|
|
33
|
+
friend class A<T>;
|
|
34
|
+
T* a;
|
|
35
|
+
public:
|
|
36
|
+
A(T* a):a{a}{}
|
|
37
|
+
};
|
|
16
38
|
```
|