回答編集履歴
2
appendix
answer
CHANGED
@@ -79,5 +79,6 @@
|
|
79
79
|
f(S1{});
|
80
80
|
f(Holder2<S1>{});
|
81
81
|
}
|
82
|
+
```
|
82
83
|
|
83
|
-
|
84
|
+
おまけ:C++20のコンセプトを利用できるとすっきりします [https://wandbox.org/permlink/phnyEYpsTWhbQtl9](https://wandbox.org/permlink/phnyEYpsTWhbQtl9)
|
1
refine
answer
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
> キャスト先の型を直接指定できない時点で、私の知識では無理なのですが...。
|
2
2
|
|
3
|
-
おっしゃる通り、インスタンス化されたテンプレートクラス`Holder<SomeType>`の外部から、そのテンプレート実引数`SomeType`を取り出すことはできません。
|
3
|
+
おっしゃる通り、インスタンス化されたテンプレートクラス`Holder<SomeType>`型の外部から、そのテンプレート実引数`SomeType`型を取り出すことはできません。つまり、その要件そのままでは実装不可能です。
|
4
4
|
|
5
5
|
---
|
6
6
|
|
7
|
-
|
7
|
+
一般的な設計としては、テンプレートクラスのテンプレート実引数に対応する型名(`value_type`など)を公開します。このようなインタフェース設計を前提とすれば、`Holder2<SomeType>`型から`Holder2<SomeType>::value_type`つまり`SomeType`型を取り出せるようになります。
|
8
8
|
|
9
9
|
```c++
|
10
10
|
template <typename T>
|