c – boostで、ブーストイテレータをstd :: stringとしてキャストした関数に渡す方法

次のコードの末尾にコメントとして具体的な質問を参照してください。

std::string s("my sample string \"with quotes\"");

boost::escaped_list_separator<char> 
els(""," ","\"\'");

boost::tokenizer<boost::escaped_list_separator<char> >::iterator 
itr;

boost::tokenizer<boost::escaped_list_separator<char> > 
tok(s, els);

itr=tok.begin();
if (itr!=tok.end()) 
    fn_that_receives_pointer_to_std_string(itr); // <---- IS IT POSSIBLE TO SEND POINTER AND NOT HAVE TO CREATE A NEW STRING ??
ベストアンサー
boost :: tokenizer< boost :: escaped_list_separator< char> > :: iteratorはstd :: stringへのポインタではありませんが、std :: string const *に変換することができます。

&(*itr)

constポインタが渡すべきものではない場合は、実行できる可能性があります。

std::string s(*itr);

fn_that_receives_pointer_to_std_stringの所有権セマンティクスに応じて、& sを渡します。 Boost Tokenizerはイテレータとconst_iteratorを区別しないので、演算子*の結果は常にconstです。

転載記事の出典を記入してください: c – boostで、ブーストイテレータをstd :: stringとしてキャストした関数に渡す方法 - コードログ