文字の range を std::string へ代入する
[お題]
std::vector
#include <iostream> #include <string> #include <vector> #include <pstade/oven/copied.hpp> #include <pstade/oven/concatenated.hpp> #include <pstade/oven/filtered.hpp> #include <boost/assign.hpp> #include <boost/lambda/lambda.hpp> int main(){ namespace oven = pstade::oven; namespace lambda = boost::lambda; using namespace boost::assign; std::vector<char> array; array += 'H', 'T', 'T'; std::string str = static_cast<const std::string&>(array|oven::copied); assert( str == "HTT" ); str = "HONEY TEE PARTY!"; str = static_cast<const std::string&> (str|oven::filtered(lambda::_1 != 'E')|oven::copied); assert( str == "HONY T PARTY!" ); return 0; }
pstade::oven::copied を使用すれば代入できるかと思ったのですが、std::string の代入処理が複数あり、関数が特定出来ないみたい。
しょうがないので static_cast を使用して明示的にキャストを行ってるけどスマートじゃないなぁ。
まぁでもこんなことが出来る辺り面白いな。
// 文字列の配列を全て連結する std::string str_array[] = { "black ", "bery ", "pie" }; str = static_cast<const std::string&> (str_array|oven::concatenated|oven::copied); assert( str == "black very pie" );
[pstade]
ver 1.04.3