函数指针amp;绑定: boost::functoin/std::function/bind
生活随笔
收集整理的這篇文章主要介紹了
函数指针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() 操作的對象(函數,類。成員函數。lambda表達式等等)。
用處就是能夠使用一個函數指針調用不用的函數實體(僅僅要他們的signature一樣),實現回調函數。或者多種不同的算法等等。
關于 std::function的實現。 see link:http://stackoverflow.com/questions/18453145/how-is-stdfunction-implemented
非常好的樣例:原文鏈接
#include <functional>
#include <iostream>
using namespace std;std::function< int(int)> Functional;// 普通函數
int TestFunc(int a)
{return a;
}// Lambda表達式
auto lambda = [](int a)->int{ return a; };// 函數對象(functor)
class Functor
{
public:int operator()(int a){return a;}
};// 1.類成員函數
// 2.類靜態函數
class TestClass
{
public:int ClassMember(int a) { return a; }static int StaticMember(int a) { return a; }
};int main()
{// 普通函數Functional = TestFunc;int result = Functional(10);cout << "普通函數:"<< result << endl;// Lambda表達式Functional = lambda;result = Functional(20);cout << "Lambda表達式:"<< result << endl;// 仿函數Functor testFunctor;Functional = testFunctor;result = Functional(30);cout << "仿函數:"<< result << endl;// 類成員函數TestClass testObj;Functional = std::bind(&TestClass::ClassMember, testObj, std::placeholders::_1);result = Functional(40);cout << "類成員函數:"<< result << endl;// 類靜態函數Functional = TestClass::StaticMember;result = Functional(50);cout << "類靜態函數:"<< result << endl;return 0;
} function簡化了函數指針的使用:
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 );
}
轉載于:https://www.cnblogs.com/mengfanrong/p/5186058.html
總結
以上是生活随笔為你收集整理的函数指针amp;绑定: boost::functoin/std::function/bind的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 求一个一生一世个性签名
- 下一篇: Deep learning的一些教程 (