如何调用在另一个堆栈流中创建的函子对象
How to call a created functor object as found in another stackoverflow?
在stackoverflow question Template函数中,有一个通过CreateFunctor
调用创建的函子对象,该函数可以获取lambda或函数指针并推导传递给另一个模板的参数。如何使用它来调用doSomething
?
int main(){
auto f1 = CreateFunctor([](int a, int b){doSomething(a, b);}, 1, 2);
f1(1,2);
}
不起作用。
请参阅http://coliru.stacked-crooked.com/a/954b1f64fd13739e例如。
您引用的帖子中CreateFunctor的目的是创建一个函数对象,该对象在构造时将参数绑定到lambda。
您可以在对CreateFunction的调用中执行此操作,但也可以在调用函数对象时再次传递参数。
因为这些论点已经被绑定,所以这是不必要的(事实上也是不可能的)。
只需调用f1()。
评论:引用的帖子试图提高绑定函数对象的性能,而不是std::function已经提供的性能。我怀疑作者过早地进行了优化。Std::函数已经内置了性能优化。
编辑:在链接的末尾找到代码
编译器错误消息非常明确:
./functor.cpp:57:5: error: type 'Functor<int, int>' does not provide a call operator
问题就在这里:
template<class... Args> struct Functor{
Functor(void (*)(Args...)) {std::cout << "Functorn" << std::endl;}
void Set(Args...) {std::cout << "Setn" << std::endl;}
};
Functor
模板类不完整。它没有定义呼叫操作员(根据错误消息)。
为什么不省去麻烦,使用标准对象呢?
auto f1 = std::function([] { do_something(1, 2); });
f1();
或
auto f1 = std::function([a = 1, b = 2]{ do_something(a,b); });
相关文章:
- 使用基类指针创建对象时,缺少派生类析构函数
- 如何创建对象函数指针C++映射?
- C++创建对象数组
- 在 C++ 的 Switch Case 中创建对象后对对象调用方法
- 如何获取在 main() 函数中构造的类的创建对象?
- 基于文件中的条目创建对象
- 错误:创建对象后无法分配区域
- C++ 通过输入创建对象
- 堆还是堆栈用于创建对象?
- 使用 C++ 创建对象数组
- 使用unique_ptr创建对象
- C++递归地在类构造函数中创建对象
- 通过向构造函数其他对象引用页面来创建对象
- ReactiveX (rx) - 在对象上应用可观察对象,而不是在可观察对象中创建对象
- 如何在OSX上正确创建C++对象文件(.o)
- 编译器是否会创建vtable,而不考虑在c++中创建对象
- 创建对象并防止被破坏
- 在C++中,友元类可以从友元类创建对象吗
- 只在堆中创建C++对象
- 创建用户定义的复制构造函数时无法创建对象