假设我有一个my_struct
包含成员变量的类型f
,它是一个函数。有可能f
成为一个 c++11 的 lambda 函数。
由于分配给 lambda 对象是非法的,我想以my_struct
这样的方式实现 的赋值运算符,即当f
是一个 lambda 时,它没有被分配。
是否有可能构建一个类型特征is_lambda
来检查一个类型的 lambda-ness?
在代码中:
#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());
}
};