为什么使用boost::function绑定类成员函数时,类的析构函数不能为虚函数

这是否与模板在编译时动态绑定有关???

#include <iostream>

#include <string>

#include <boost/function.hpp>

#include <vector>


class CBase {

public:

//CBase();

//~CBase();

public:

virtual void print(const std::string& vInfo) {std::cout << "base class member print function:" << vInfo << std::endl;}

};


class CDerive : public CBase {

public:

//CDerive();

//~CDerive(); //why?


public:

virtual void print(const std::string& vInfo) {std::cout << "derive class member print function:" << vInfo << std::endl;}

};


void globalPrint(const std::string& vInfo)

{

std::cout << "global print function:" << vInfo << std::endl;

}


class FunctionObj {

public:

//FunctionObj();

//~FunctionObj(); why?

public:

void operator()(const std::string& vInfo) {std::cout << "function object print function:" << vInfo << std::endl;}

};



int main (int argc, char * const argv[]) {

    // insert code here...

std::vector<boost::function<void(const std::string&)> > FuncVec;

FuncVec.push_back(&globalPrint);

FuncVec.push_back(FunctionObj());

FuncVec[0]("0");

FuncVec[1]("1");

boost::function<void(CBase*, const std::string&)> Func0;

Func0 = &CBase::print;

CBase base;

Func0(&base, "2");

boost::function<void(CDerive*, const std::string&)> Func1; //why can't be CBase

CDerive derive;

Func1 = &CDerive::print;

Func1((&derive), "3");

    return 0;

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值