Повышение объединения:: lexical_cast и станд.:: преобразовать

Я хотел бы записать что-то вроде этого, которое не может быть скомпилировано:

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 );
    }
};

Существует ли более легкий способ сделать это?

6
задан Rupert Jones 13 February 2010 в 20:00
поделиться

2 ответа

lexical_cast имеет два аргумента шаблона: целевой тип и исходный тип. При нормальном использовании второй выводится из вызова.

Однако здесь вы хотите взять адрес функции и указать все аргументы шаблона:

std::transform( as.begin(), as.end(), bs.begin(), boost::lexical_cast<B, A> );
16
ответ дан 8 December 2019 в 13:45
поделиться

Если вы часто занимаетесь подобными вещами, вы можете рассмотреть библиотеку Boost.Convert (не принимаемая часть Boost еще). См. Этот пример из руководства:

std::transform(strings.begin(), strings.end(),
               std::back_inserter(integers),
               boost::convert<int>::from<string>());
1
ответ дан 8 December 2019 в 13:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: