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);