【发布时间】:2011-12-12 22:44:55
【问题描述】:
假设我有一个类型my_struct 包含一个成员变量f,它是一个函数。 f 有可能是一个 c++11 的 lambda 函数。
由于分配给 lambda 对象是非法的,我想以这样一种方式实现my_struct 的赋值运算符,当f 是一个 lambda 时,它不会被分配。
是否可以构建一个类型特征is_lambda 来检查类型的 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());
}
};
【问题讨论】:
标签: c++ lambda template-meta-programming