Voi*_*tar 7 c++ delegates function-pointers c++11
假设我有这三种不同的功能,我可能想指出:
float test1(int a, int b) {
return 7.0f;
}
struct TestClass {
float test2(int a, int b) {
return 5.0f;
}
};
struct TestClass2 {
float test3(int a, int b) {
return 3.0f;
}
};
Run Code Online (Sandbox Code Playgroud)
注意所有三个都使用相同的参数并返回值.我想要抽象出它是否是一个成员函数以及它属于哪个类.我想要一个委托类型,它可以引用这3个函数中的任何一个,这取决于它是如何初始化的.
这是我的第一次尝试:
typedef std::function<float(int, int)> MyDelegate; // is this right?
int main() {
TestClass obj;
TestClass2 obj2;
MyDelegate a = test1;
MyDelegate b = std::bind(std::mem_fn(&TestClass::test2), obj); // is this right?
MyDelegate c = std::bind(std::mem_fn(&TestClass2::test3), obj2); // is this right?
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的想法是,我也想将'this'指针存储在包装器中.这样,它就像一个功能齐全的委托.例如,调用'b(x,y)'就像调用一样obj.test2(x, y).
我甚至无法编译,我可能还没有完全掌握它.我是这些库的新手,VS2012中的错误是灾难性的无益的.任何帮助,将不胜感激.
Chr*_*ica 10
您需要告诉std::bind如何处理其他函数参数.为了使调用b(x, y)委托x和y两个原始函数参数,您需要使用std::placeholders命名空间中的占位符:
std::bind(&TestClass::test2, obj, std::placeholders::_1, std::placeholders::_2);
Run Code Online (Sandbox Code Playgroud)
并且也没有必要std::mem_fn(它可以工作),因为std::bind已经正确处理成员函数(使隐式this参数成为显式的第一个参数,就像std::mem_fn这样).
| 归档时间: |
|
| 查看次数: |
7814 次 |
| 最近记录: |