回答編集履歴
1
expand answer
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)時点では時間切れでムーブセマンティクスに対応できなかったとのことで、将来的には何らかのサポートがあるかもしれませんね。
|