6

コンパイルできない次のようなものを書きたいと思います。

std::vector<A> as;
std::vector<B> bs( as.size() );
std::transform( as.beginn(), as.end(), bs.begin(), boost::lexical_cast<B> );

しかし、これは機能していないので、これを行うファンクターを作成しました:

template<typename Dest>
struct lexical_transform
{
    template<typename Src>
    Dest operator()( const Src& src ) const
    {
        return boost::lexical_cast<Dest>( src );
    }
};

これを行う簡単な方法はありますか?

4

2 に答える 2

16

lexical_castには、ターゲット タイプとソース タイプの 2 つのテンプレート引数があります。通常の使用では、秒は呼び出しから推測されます。

ただし、ここでは関数のアドレスを取得する必要があり、すべてのテンプレート引数を指定する必要があります。

std::transform( as.begin(), as.end(), bs.begin(), boost::lexical_cast<B, A> );
于 2010-02-13T20:48:34.403 に答える
1

この種のことを頻繁に行う場合は、Boost.Convertライブラリを検討することをお勧めします (まだ Boost の一部として受け入れられていません)。マニュアルからこの例を参照してください。

std::transform(strings.begin(), strings.end(),
               std::back_inserter(integers),
               boost::convert<int>::from<string>());
于 2010-02-13T20:53:13.430 に答える