Я не думаю, что в Boost.MPL есть такой класс, поскольку он ориентирован исключительно на вычисления во время компиляции.Этот тип оболочки лучше хранить в Boost.Fusion , который предназначен для установления связи между компиляцией и объектами времени выполнения, но я ничего не нашел.
Я думаю, вам придетсяиспользуйте свою собственную реализацию, которая с первого взгляда кажется хорошей (хотя я бы предпочел использовать mpl::apply
для обработки выражений-заполнителей).Я думаю, вы также можете опустить тип возвращаемого значения, поскольку он может быть выведен из лямбды.
Вот альтернативная реализация, использующая apply
и определяющая тип возвращаемого значения из лямбды:
template < typename Lambda >
struct functor
{
template < typename Type >
typename boost::mpl::apply< Lambda, Type >::type::value_type
operator()( Type )
{
return boost::mpl::apply< Lambda, Type >::type::value;
}
};
// sample use:
int main()
{
boost::mpl::int_<5> five;
std::cout << functor< boost::mpl::identity< boost::mpl::_ > >()( five );
// Output "5"
}