函数指针amp;绑定: boost::functoin/std::function/bind
see link: https://isocpp.org/wiki/faq/pointers-to-members
function vs template: http://stackoverflow.com/questions/14677997/stdfunction-vs-template
boost::functoin/std::function可用于全部 operator() 操作的對象(函數(shù),類。成員函數(shù)。lambda表達(dá)式等等)。
用處就是能夠使用一個函數(shù)指針調(diào)用不用的函數(shù)實(shí)體(僅僅要他們的signature一樣),實(shí)現(xiàn)回調(diào)函數(shù)?;蛘叨喾N不同的算法等等。
關(guān)于 std::function的實(shí)現(xiàn)。 see link:http://stackoverflow.com/questions/18453145/how-is-stdfunction-implemented
非常好的樣例:原文鏈接
#include <functional>
#include <iostream>
using namespace std;std::function< int(int)> Functional;// 普通函數(shù)
int TestFunc(int a)
{return a;
}// Lambda表達(dá)式
auto lambda = [](int a)->int{ return a; };// 函數(shù)對象(functor)
class Functor
{
public:int operator()(int a){return a;}
};// 1.類成員函數(shù)
// 2.類靜態(tài)函數(shù)
class TestClass
{
public:int ClassMember(int a) { return a; }static int StaticMember(int a) { return a; }
};int main()
{// 普通函數(shù)Functional = TestFunc;int result = Functional(10);cout << "普通函數(shù):"<< result << endl;// Lambda表達(dá)式Functional = lambda;result = Functional(20);cout << "Lambda表達(dá)式:"<< result << endl;// 仿函數(shù)Functor testFunctor;Functional = testFunctor;result = Functional(30);cout << "仿函數(shù):"<< result << endl;// 類成員函數(shù)TestClass testObj;Functional = std::bind(&TestClass::ClassMember, testObj, std::placeholders::_1);result = Functional(40);cout << "類成員函數(shù):"<< result << endl;// 類靜態(tài)函數(shù)Functional = TestClass::StaticMember;result = Functional(50);cout << "類靜態(tài)函數(shù):"<< result << endl;return 0;
} function簡化了函數(shù)指針的使用:
class FooClass {
public:void Print( int a ) {std::cout << "A FooClass, param = "<< a <<" this = " << this << std::endl;}
};void main() {FooClass *myFoo = new FooClass();void( FooClass::* oldFunc )(int) = &FooClass::Print; //C style function pointer(myFoo->*oldFunc)( 5 );boost::function newFunc = boost::bind( &FooClass::Print, myFoo, _1 ); //boost function newFunc( 5 );
}
轉(zhuǎn)載于:https://www.cnblogs.com/mengfanrong/p/5186058.html
總結(jié)
以上是生活随笔為你收集整理的函数指针amp;绑定: boost::functoin/std::function/bind的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 求一个一生一世个性签名
- 下一篇: Deep learning的一些教程 (