相关疑难解决方法(0)

函数指针是C++中的函数对象吗?

C++标准将函数对象定义为:

函数对象类型是一种对象类型,可以是函数调用中postfix-expression的类型.(链接)

首先,我在想,函数对象是仿函数,但后来我意识到,对于一个函数指针ptr类型的P(不是功能,而是一个函数指针)std::is_object_v<P>true,可与被称为ptr(Args...)语法.

我认为函数指针被标准视为函数对象是对的吗?如果它们不是函数指针不满足定义的哪一部分?

c++ function function-object type-traits c++11

8
推荐指数
1
解决办法
824
查看次数

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

假设我有一个my_struct包含成员变量的类型f,它是一个函数.它可能f是一个c ++ 11 lambda函数.

因为分配给lambda对象是非法的,所以我想以my_struct这样一种方式实现赋值运算符:when 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());
  }
};
Run Code Online (Sandbox Code Playgroud)

c++ lambda template-meta-programming

6
推荐指数
2
解决办法
1228
查看次数