2017-01-17 3 views
1

C++でプロトタイプを作成していて、utf8を認識できない不変の文字列を作るためのいくつかのコンセプトを試しながら、私は次のジレンマを立てました。同様に、部分文字列を返す代わりに、元の文字列の一部を参照する部分文字列を返すことができるようにします。std :: stringの定数ビューを返すには?

// Just some quick prototyping of ideas. 
// Heavier than just a normal string. 
// Construction would be heavier too because of the indices vector. 
// Size would end up being O1 though. 
// Indexing would also be faster. 

struct ustring { 
    std::string data; 
    std::vector<size_t> indices; 

    // How do I return a view to a string? 

    std::string operator [](size_t const i) const { 
     return data.substr(indices[i], indices[i + 1] - indices[i]); 
    } 
}; 
+3

あなたは 'string_view'クラスをC++ 17から利用できますか? –

+3

代わりに、いくつかのライブラリはC++ 14で ''を実装していましたが、その前にboostにstring_viewライブラリがありました。あなたはGSLを使うこともできます。 – jaggedSpire

答えて

3

std::string_viewのようなサウンドはあなたのためのクラスです! C++ 17のサポートがない場合は、std::experimental::string_viewを試してみてください。それが利用できない場合は、boost::string_viewを試してみてください。これらの選択肢のすべてが(ちょうどあなたが使用して何とstd::string_viewを置き換え)と同じように使用することができます。

std::string_view operator [](size_t const i) const { 
    return std::string_view(&data[i], 1); 
} 

は別の台所のシンクが常にありますC++、へようこそ!

+0

Visual Studio 2017では、ヘッダーはintellisenseに表示されますが、 'std ::'を実行すると 'string_view'も' experimental :: string_view'も利用できません。多分彼らは将来の使用のための言葉を予約しただけでしょうか? –

+0

'# 'または' #include 'でしたか? –

+0

#include

関連する問題