gpt4 book ai didi

c++ - 如何在编译时检测类型是否为 lambda 表达式?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:10:10 31 4
gpt4 key购买 nike

假设我有一个 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());
}
};

最佳答案

没有编译器支持是不可能的,因为 lambda 的类型只是一个普通的非 union 类类型。

§5.1.2 [expr.prim.lambda] p3

The type of the lambda-expression (which is also the type of the closure object) is a unique, unnamed nonunion class type [...]

关于c++ - 如何在编译时检测类型是否为 lambda 表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8481997/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com