簡単な C++11 スタイルのステートフル アロケーター型を作成しました。与えられた
template<typename T> class my_allocator {
// the usual stuff
};
template<typename T> using my_vector = std::vector<T, my_allocator<T>>;
my_vector<int> x;
std::vector<int> y = x; // error
デフォルトのアロケータを使用しmy_vectorて a から a への変換を許可する最良の方法は何ですか? std::vectorGCC 4.7(最近のsvn)は言う
error: conversion from 'my_vector<int> {aka std::vector<int, my_allocator<int>>}' to non-scalar type 'std::vector<int>' requested
明らかに、これは次のような単純な変換関数で行うことができます。
template<typename T> std::vector<T> to_std_vec(const my_vector<T>& v) {
return std::vector<T>(&v[0], &v[v.size()]);
}
しかし、これはかなり洗練されていないようです。C++11 でより良い解決策はありますか?
もちろん、この状況では移動セマンティクスは適切ですが、余分なノイズやタイピングなしでコピーの構築と代入が機能することを望みます。