teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

appendix

2019/10/19 13:29

投稿

yohhoy
yohhoy

スコア6191

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

2019/10/19 13:29

投稿

yohhoy
yohhoy

スコア6191

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
- 通常は、テンプレートクラスの公開インタフェースとしてテンプレート実引数に対応する型名を公開します。このようなインタフェース設計を前提とすれば、`Holder2<SomeType>`型から`Holder2<SomeType>::value_type`つまり`SomeType`型を取り出せるようになります。
7
+ 一般的な設計としては、テンプレートクラスのテンプレート実引数に対応する型名(`value_type`など)を公開します。このようなインタフェース設計を前提とすれば、`Holder2<SomeType>`型から`Holder2<SomeType>::value_type`つまり`SomeType`型を取り出せるようになります。
8
8
 
9
9
  ```c++
10
10
  template <typename T>