延迟函数调用中的延迟函数调用
Delayed Function Call in a Delayed Function Call
基本上我想做的是:
std::function< int( void ) > foo = &getInt;
int magicNumber = 13;
std::function< int( void ) > delayedAdd = std::bind( std::plus, magicNumber, getInt );
显然这行不通。我需要以某种方式包装getInt
调用,以便它在std::plus
函数发生之前发生。那么所有这些都需要延迟,直到我调用delayedAdd
。
我在QObject之外使用Qt5.0,所以我不能将lambdaconnect
转换为SLOT
。但我想把connect
类似于delayedAdd
的东西改为SLOT
。
+标签功能
您可以使用std::bind
:延迟函数调用
using namespace std;
int getInt() {
cout << "getInt!" << endl;
return 42;
}
function<int(void)> foo = &getInt;
int magicNumber = 13;
cout << "before delayed definition" << endl;
function<int(void)> delayed = std::bind(plus<int>(), magicNumber, bind(foo));
cout << "after delayed definition" << endl;
int i = delayed();
cout << "after delayed call" << endl;
输出:
延迟定义之前
延迟定义之后
getInt
延迟呼叫后
您也不需要像以前那样定义foo
。您可以在delayed
:的定义中直接绑定getInt
function<int(void)> delayed = bind(plus<int>(), magicNumber, bind(getInt));
有关std::bind的更多详细信息,请查看N3797,第20.9.9段。
有关更具体的解释,cppreference说:
std::绑定返回类型
成员函数运算符()给定从早期绑定调用中获得的对象g,当它在函数调用表达式g(u1,u2,…uM)中被调用时,将调用std::decay::type类型的存储对象,参数定义如下:
-如果std::is_bind_expression::value==true(即在绑定的初始调用中使用了另一个绑定子表达式作为参数),则会立即调用该绑定子表达式,并将其结果传递给可调用对象。如果绑定子表达式有任何占位符参数,则从u1、u2、…中选取
。。。
相关文章:
- 函数调用中参数的顺序重要吗
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 变量没有改变?通过向量的函数调用
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- 我知道函数调用中存在歧义.有没有办法调用foo()函数
- 模板函数调用
- 获取从C++中同一类中的构造函数调用的方法返回的值
- 析构函数调用
- 成员函数调用和C++对象模型
- 使用共享指针的函数调用,其对象应为 const
- C++:编译时检查匹配的函数调用对?
- 函数调用C++中的参数太少
- 来自 DLL 的函数调用 [表观调用的括号前面的表达式必须具有(指向-)函数类型]
- 延迟函数调用中的延迟函数调用
- C/ c++中的延迟函数调用
- 延迟函数调用,如何传递参数
- 如何以最小的延迟依次调用两个函数
- c++模板编程-延迟函数调用
- 延迟构造函数调用