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

回答編集履歴

1

expand answer

2016/05/15 03:01

投稿

yohhoy
yohhoy

スコア6191

answer CHANGED
@@ -1,3 +1,12 @@
1
1
  要件をイマイチ理解していないので外しているかもしれませんが、Boost.Rangeでは [any_range](http://www.boost.org/doc/libs/1_60_0/libs/range/doc/html/range/reference/ranges/any_range.html) が提供されます。その名前通り"イテレータにboost:anyテクニックを応用"したものですね。
2
2
 
3
- 公式ドキュメントにも記載がありますが、Type Erasureを使っているため仮想関数呼び出しコストは存在します。
3
+ 公式ドキュメントにも記載がありますが、Type Erasureを使っているため仮想関数呼び出しコストは存在します。
4
+
5
+ ----
6
+ **追記:** 追加された疑問に回答します。
7
+
8
+ > 何故初期化リストではコピー・コンストラクタが必要になるのか
9
+
10
+ 初期化リストを受け取る側の[`std::initializer_list<E>`クラステンプレート](http://cpprefjp.github.io/reference/initializer_list.html)では、const修飾された要素型にしかアクセスできないため、C++14現在では要素型`E`にはコピー操作を要求します。
11
+
12
+ ただやはり不便ですし必ずしも必須要件でもないため、[N4166: Movable initializer lists](https://ezoeryou.github.io/blog/article/2014-11-05-N4160-N4169.html) で改善提案がされているようです。最新の提案文書(v2)は [P0065R0](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0065r0.pdf) です。提案文書によれば、C++11(旧C++0x)時点では時間切れでムーブセマンティクスに対応できなかったとのことで、将来的には何らかのサポートがあるかもしれませんね。