Предположим, у меня есть тип my_struct
, включающий переменную-член, f
, которая является функцией . f
может быть лямбда-функцией С ++ 11.
Поскольку присвоение лямбда-объектам запрещено, я хотел бы реализовать оператор присваивания my_struct
таким образом, чтобы, когда f
является лямбда-выражением, это не назначенный.
Можно ли создать свойство типа is_lambda
, которое может проверять тип на лямбда-сущность?
В коде:
#include <type_traits>
template<typename Function> struct is_lambda
{
// what goes here?
};
template<typename Function> struct my_struct
{
Function f;
my_struct &do_assign(const my_struct &other, std::true_type)
{
// don't assign to f
return *this;
}
my_struct &do_assign(const my_struct &other, std::false_type)
{
// do assign to f
f = other.f;
return *this;
}
my_struct &operator=(const my_struct &other)
{
return do_assign(other, typename is_lambda<Function>::type());
}
};