だから私は文字列型のフライ級を持っています:
typedef boost::flyweight< std::string, boost::flyweights::intermodule_holder > SymbolName_t;
そして、私はこれのインスタンスをそれらのベクトルにプッシュしたいのですが、素朴なアプローチは機能しません:
void PushSome( std::vector < SymbolName_t >& list)
{
std::string& str = getSomeStr();
list.push_back( str ); // <--- won't compile
}
だから私は一時的なコンストラクターを追加しました:
void PushSome( std::vector < SymbolName_t >& list)
{
std::string& str = getSomeStr();
list.push_back( SymbolName_t(str) ); // <--- compiles ok
}
私の質問は、言語の制約を考えると、このアプローチは最適ですか?静的変換演算子を提供するなど、他の方法でこれを実装すると、どのようなメリットがありますか?boost::flyweight
テンプレートを変更する必要があるため、非明示的なコンストラクターを介した暗黙的な変換は有効なオプションとは見なされません。