青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

   C++ 技術(shù)中心

   :: 首頁 :: 聯(lián)系 ::  :: 管理
  160 Posts :: 0 Stories :: 87 Comments :: 0 Trackbacks

公告

鄭重聲明:本BLOG所發(fā)表的原創(chuàng)文章,作者保留一切權(quán)利。必須經(jīng)過作者本人同意后方可轉(zhuǎn)載,并注名作者(天空)和出處(CppBlog.com)。作者Email:coder@luckcoder.com

留言簿(27)

搜索

  •  

最新隨筆

最新評論

評論排行榜

/* 
 * File:   main.cpp
 * Author: Vicky.H
 * Email:  eclipser@163.com
 
*/
#include <iostream>
#include <functional>
#include <typeinfo>
#include <string.h>

int add1(int i, int j, int k) {
    return i + j + k;
}


class Utils {
public:
    Utils(const char* name) {
        strcpy(_name, name);
    }
    
    void sayHello(const char* name) const {
        std::cout << _name << " say: hello " << name << std::endl;
    }
    
    static int getId() {
        return 10001;
    } 
    
    int operator()(int i, int j, int k) const {
        return i + j + k;
    }
    
private:
    char _name[32];
};


/*
 * 
 
*/
int main(void) {
    
    // 綁定全局函數(shù)
    auto add2 = std::bind(add1, std::placeholders::_1, std::placeholders::_2, 10);
    // 函數(shù)add2 = 綁定add1函數(shù),參數(shù)1不變,參數(shù)2不變,參數(shù)3固定為10.
    std::cout << typeid(add2).name() << std::endl;
    std::cout << "add2(1,2) = " << add2(1, 2) << std::endl;
    
    std::cout << "\n---------------------------" << std::endl;
    
    // 綁定成員函數(shù)
    Utils utils("Vicky");
    auto sayHello = std::bind(&Utils::sayHello, utils/*調(diào)用者*/, std::placeholders::_1/*參數(shù)1*/);
    sayHello("Jack");
    
    auto sayHelloToLucy = std::bind(&Utils::sayHello, utils/*調(diào)用者*/, "Lucy"/*固定參數(shù)1*/);
    sayHelloToLucy();
    
    // 綁定靜態(tài)成員函數(shù)
    auto getId = std::bind(&Utils::getId);
    std::cout << getId() << std::endl;
    
    std::cout << "\n---------------------------" << std::endl;
    
    // 綁定operator函數(shù)
    auto add100 = std::bind(&Utils::operator (), utils, std::placeholders::_1, std::placeholders::_2, 100);
    std::cout << "add100(1, 2) = " << add100(1, 2) << std::endl;
    
    // 注意:無法使用std::bind()綁定一個(gè)重載函數(shù)
    
    return 0;
}

/* 
 * File:   main2.cpp
 * Author: Vicky.H
 * Email:  eclipser@163.com
 
*/
#include <iostream>
#include <typeinfo>


void sayHello() {
    std::cout << "Hello world !" << std::endl;
}

int sum(int i, int j, int k) {
    return i + j + k;
}

template <typename T>
class Func {
public:

    Func(T fun) {
        if (!fun) {
            throw "fun nullptr";
        }
        _fun = fun;
    }

    template<typename R, typename A1, typename A2, typename A3, typename A4, typename A5>
    R Call(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) {
        return _fun(a1, a2, a3, a4, a5);
    }

    template<typename R, typename A1, typename A2, typename A3, typename A4>
    R Call(A1 a1, A2 a2, A3 a3, A4 a4) {
        return _fun(a1, a2, a3, a4);
    }

    template<typename R, typename A1, typename A2, typename A3>
    R Call(A1 a1, A2 a2, A3 a3) {
        return _fun(a1, a2, a3);
    }

    template<typename R, typename A1, typename A2>
    R Call(A1 a1, A2 a2) {
        return _fun(a1, a2);
    }

    template<typename R, typename A1>
    R Call(A1 a1) {
        return _fun(a1);
    }

    template<typename R>
    R Call() {
        return _fun();
    }

    void Call() {
        _fun();
    }

private:
    T _fun;
};

#include <functional>

template<typename R = void, typename Args>
class Fn {
public:
    Fn(std::function<R(Args)> fun) : _fun(fun) {
    }
    
    R operator()(Args args) {
        return _fun(args);
    }
private:
    std::function<R(Args) > _fun;
};

/*
 * 將函數(shù)注冊到對象中,通過對象直接調(diào)用
 
*/
int main(void) {


    Func<void(*)() > sayHelloFunc(sayHello);
    sayHelloFunc.Call();


    Func<int (*)(intintint) > sumFunc(sum);
    std::cout << "sumFunc.Call<int>(1, 2, 3) : " << sumFunc.Call<int>(1, 2, 3) << std::endl;


    std::cout << "\n---------------------------" << std::endl;

    Fn<> sayHelloFn(sayHello);
    sayHelloFn();
    
    Fn<intintintint> sumFn(sum);
    std::cout << "sumFn(1, 2, 3) : " << sumFn(1, 2, 3) << std::endl;

    std::cout << "\n---------------------------" << std::endl;

    return 0;
}

Hello world !
sumFunc.Call<int>(1, 2, 3) : 6


---------------------------
Hello world !
sumFn(1, 2, 3) : 6


---------------------------

上面的例子非常有趣,使用了2種方案,將一個(gè)函數(shù),注冊到一個(gè)對象/仿函數(shù)中,并且通過一個(gè)對象/仿函數(shù)來直接調(diào)用調(diào)用。
例子顯而易見的,第2種方案更佳簡潔,并且對傳遞參數(shù)有明確的判斷,當(dāng)參數(shù)類型或數(shù)量不正確的時(shí)候,編譯器將導(dǎo)致失敗。
這種方案,可以將類的成員變量直接作為函數(shù)的參數(shù)使用,或者,如我:
http://blog.csdn.net/eclipser1987/article/details/23926395
這篇文章中,無法直接調(diào)用腳本函數(shù)類,有了好的解決辦法。這個(gè)我將隨后補(bǔ)充。

#include <list>
#include <functional>

template<typename Args>
class Fns
{
private:

    std::list<std::function<void(Args)> > _calls;

public:

    virtual ~Fns()
    {
        _calls.clear();
    }

    void connect(std::function<void(Args)> fct)
    {
        _calls.push_back(fct);
    }

    template<typename Object>
    void connect(Object* objectvoid (Object::*method)(Args))
    {
        _calls.push_back([object,method](Args args){(*object.*method)(args);});
    }

    template<typename Object>
    void connect(Object* objectvoid (Object::*method)(Argsconst)
    {
        _calls.push_back([object,method](Args args){(*object.*method)(args);});
    }

    template<typename Object>
    void connect(const Object* objectvoid (Object::*method)(Argsconst)
    {
        _calls.push_back([object,method](Args args){(*object.*method)(args);});
    }

    void emit(Args args)
    {
        for(auto call : _calls)
            call(args);
    }
};

#include <cstdio>
#include "Signal.hpp"

class Foo
{
public:

    void bar(int x, int y)
    {
        printf("Foo::bar(%d, %d)\n", x, y);
    }
};

void foobar(int x, int y)
{
    printf("foobar(%d, %d)\n", x, y);
}

int main(void)
{
    Foo foo;
    Fns<intint> s;

    // Connect a function
    s.connect(foobar);
    // Connect a class method
    s.connect(&foo, &Foo::bar);
    // Create and connect some lambda expression
    s.connect([&foo](int x, int y){ 
        printf("lambda::"); foo.bar(x, y); 
    });
    // Emit the signal !
    s.emit(4, 2);
    getchar();
    return 0;
}

foobar(4, 2)
Foo::bar(4, 2)
lambda::Foo::bar(4, 2)
posted on 2016-06-13 15:39 C++技術(shù)中心 閱讀(1454) 評論(0)  編輯 收藏 引用 所屬分類: C++ 基礎(chǔ)
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲一区免费视频| 亚洲免费视频观看| 久久夜色精品国产亚洲aⅴ| 日韩一区二区精品葵司在线| 亚洲精华国产欧美| 亚洲高清资源| 日韩视频不卡中文| 亚洲国产精品123| 久久久综合网| 欧美视频日韩视频| 欧美喷水视频| 欧美啪啪一区| 国产免费成人av| 一区二区三区自拍| 亚洲精品视频一区| 亚洲一区二区三区视频| 欧美专区一区二区三区| 卡一卡二国产精品| 日韩视频在线播放| 欧美专区日韩专区| 欧美激情第3页| 国产女人水真多18毛片18精品视频| 国产一区在线观看视频| 亚洲久久一区二区| 久久精品国产精品| 亚洲国产高清在线| 99国产麻豆精品| 欧美在线一级视频| 欧美日韩综合另类| 亚洲国产精彩中文乱码av在线播放| 中文在线不卡| 免费国产自线拍一欧美视频| 99国产欧美久久久精品| 久久久久国色av免费观看性色| 欧美日韩另类国产亚洲欧美一级| 国产一区二区三区高清| 中文亚洲欧美| 亚洲激情视频在线| 久久精品国产亚洲精品| 欧美日韩一区二区精品| 亚洲国产精品va在线观看黑人| 亚洲欧美资源在线| 亚洲三级视频在线观看| 久久久xxx| 国产日产亚洲精品| 亚洲在线中文字幕| 亚洲免费观看高清完整版在线观看| 久久久久欧美精品| 国产亚洲午夜| 欧美中文字幕在线| 亚洲在线播放| 国产精品日韩久久久| 亚洲图片你懂的| 日韩一二在线观看| 欧美日韩高清在线| 欧美一区二区三区视频免费播放 | 亚洲天堂激情| 欧美大片免费观看| 伊人精品视频| 欧美高清日韩| 欧美一级黄色录像| 欧美视频在线视频| 亚洲国产乱码最新视频| 久久躁狠狠躁夜夜爽| 香蕉视频成人在线观看| 国产精品久久久久久妇女6080| 亚洲精品一区二区在线观看| 久久都是精品| 亚洲七七久久综合桃花剧情介绍| 久久久91精品国产一区二区三区| 国产精品系列在线| 欧美有码在线观看视频| 亚洲欧美日韩国产中文| 国产日韩欧美三级| 久久久欧美精品sm网站| 久久精品视频导航| 亚洲国产欧美一区二区三区久久| 欧美v国产在线一区二区三区| 久久人人97超碰国产公开结果 | 夜夜嗨一区二区| 亚洲精品亚洲人成人网| 欧美日韩不卡合集视频| 亚洲欧美制服另类日韩| 香蕉久久一区二区不卡无毒影院 | 亚洲一区二区三区中文字幕在线| 亚洲免费精品| 国产模特精品视频久久久久| 久久久久久久网| 久久综合九色| 亚洲综合精品一区二区| 欧美一级大片在线观看| 亚洲国产专区校园欧美| 99xxxx成人网| 国内精品视频666| 亚洲人人精品| 韩国av一区二区三区四区| 亚洲高清视频在线| 国产伦理一区| 亚洲黄色成人| 韩国精品在线观看| 亚洲伦理精品| 亚洲丰满少妇videoshd| 在线中文字幕一区| 亚洲大胆人体视频| 亚洲一区二区三区中文字幕| 在线观看精品| 亚洲欧美一区二区三区久久| 亚洲精品在线免费| 欧美影院午夜播放| 亚洲欧美福利一区二区| 欧美国产日韩一区| 久久久久久久久久久成人| 欧美日韩麻豆| 亚洲激情网站| 亚洲成人在线视频播放| 亚洲欧美变态国产另类| 日韩视频免费看| 欧美激情中文不卡| 日韩一级黄色大片| 国语自产精品视频在线看抢先版结局 | 性欧美超级视频| 亚洲视频导航| 噜噜噜久久亚洲精品国产品小说| 欧美亚洲日本国产| 欧美日韩一区自拍| 亚洲精品偷拍| 亚洲美女av在线播放| 麻豆精品在线视频| 老司机成人网| 国产在线高清精品| 亚洲欧美资源在线| 欧美一区二区三区四区夜夜大片| 欧美日韩在线播放一区二区| 亚洲国产视频a| 亚洲国产小视频| 免费高清在线一区| 亚洲成人中文| 99re视频这里只有精品| 欧美成人视屏| 亚洲精品国产拍免费91在线| 亚洲精选成人| 欧美另类人妖| 一本一本a久久| 亚洲欧美日韩网| 国产模特精品视频久久久久| 午夜亚洲精品| 老司机成人在线视频| 亚洲国产精选| 欧美日韩成人一区| 亚洲视频在线视频| 午夜日本精品| 狠狠爱综合网| 欧美成人精品在线| 亚洲日本一区二区| 一本色道久久综合狠狠躁篇的优点| 99www免费人成精品| 欧美午夜片欧美片在线观看| 亚洲性av在线| 久久综合中文色婷婷| 亚洲人成高清| 国产精品久久久久久av下载红粉 | 欧美wwwwww| 日韩香蕉视频| 久久久美女艺术照精彩视频福利播放| 在线播放中文一区| 欧美人与性动交α欧美精品济南到| 99综合电影在线视频| 欧美在线观看一二区| 精品成人一区二区三区| 欧美激情精品久久久久久蜜臀| 99国产精品久久久久老师| 欧美在线视频免费播放| 在线不卡欧美| 欧美视频官网| 久久久精品一品道一区| 亚洲精品国产精品国自产在线| 午夜精品av| 亚洲人成久久| 国产欧美一区二区三区在线老狼| 久久综合伊人77777蜜臀| 一本久道久久久| 久久久久.com| 性色av一区二区三区红粉影视| 欧美在线一级视频| 亚洲激情在线| 国产日韩在线视频| 欧美成人精品激情在线观看| 亚洲一区二区毛片| 亚洲电影天堂av| 欧美制服丝袜| 亚洲天堂av在线免费| 亚洲成人资源网| 国产精品一区二区三区成人| 你懂的国产精品| 欧美在线看片| 在线中文字幕日韩| 亚洲开发第一视频在线播放| 美女精品在线| 久久久久久久网| 午夜精品久久久99热福利|