C++ 函数指针或函数对象应该如何传递?

C++ 函数指针或函数对象应该如何传递?,c++,C++,每次我看到函数以function作为模板参数时,它都按值取function对象 例如来自 不能像这样呼叫: std::vector<int> v{1,2,3}; for_each(v.begin(), v.end(), FunctorNMC()); 但这是错误的 2) 为什么呢?如果我有函子,由于某种原因它不支持移动怎么办 3) 函数不应该被视为类似于函数&&fn 4) 函数对象是否可以按值传递(不移动) 如果需要的话,该项目将继续运行。该代码无法编译,因为显式声明移动构造函数会导

每次我看到函数以
function
作为模板参数时,它都按值取
function
对象

例如来自

不能像这样呼叫:

std::vector<int> v{1,2,3};
for_each(v.begin(), v.end(), FunctorNMC());
但这是错误的

2) 为什么呢?如果我有函子,由于某种原因它不支持移动怎么办

3) 函数不应该被视为类似于
函数&&fn

4) 函数对象是否可以按值传递(不移动)


如果需要的话,该项目将继续运行。

该代码无法编译,因为显式声明移动构造函数会导致隐式定义的复制构造函数被删除。如果您提供了一个复制构造函数,那么它应该可以工作。不管怎么说,我很难理解为什么你会想要制作一个既不能复制也不能移动的函子。请参阅
struct FunctorNMC //non-move-constructible
{
    FunctorNMC() = default;
    FunctorNMC(FunctorNMC&&) = delete;

    void operator()(int a) const { std::cout << a << " ";   }
};
std::vector<int> v{1,2,3};
for_each(v.begin(), v.end(), FunctorNMC());
FunctorNMC tmp;
my_for_each(v.begin(), v.end(), tmp);