在基本构造函数中绑定虚拟类成员函数

古斯塔沃

下面的示例显示了将虚拟成员函数绑定到fn的基类。在gcc 4.8上,对派生类的fn的调用将调用重载的calculate函数。谁能解释为什么会这样?此行为编译器是否独立运行?

#include <functional>
#include <iostream>

class Base {
public:
    Base(){
        fn = std::bind(&Base::calculate,this,1);
    }

    virtual int calculate(int value){
        return value + 1;
    }

    std::function<int(int)> fn;  
};

class Derived : public Base {
public:
    Derived() : Base() {}

    int calculate(int value){
        return 0;
    }
};

int main(int argc, const char **argv){
    Derived test;
    std::cout << test.fn(10) << std::endl;
    /* Output of test.fn(10) is zero, so overloaded function was called */
    return 0;
}
克瑞克SB

代码的行为符合预期:调用虚拟成员函数将分派到包含调用实例对象的最派生对象中最被重写的函数。您正在使用成员函数指针(在bind表达式内部)的事实没有任何区别。实际上,指向成员函数的指针的全部要点是它们可以正确地与虚拟分派一起使用。

如果要对基函数进行非虚拟调用,则可以执行以下操作:

Base() : fn([this]() { return this->Base::calculate(1); }) {}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在基本构造函数中绑定虚拟类成员函数

来自分类Dev

在派生类构造函数中设置基本成员

来自分类Dev

解决构造函数中的虚拟成员调用

来自分类Dev

解决构造函数中的虚拟成员调用

来自分类Dev

从继承的类构造函数中调用lambda函数中的基本成员?

来自分类Dev

在类定义中调用成员构造函数

来自分类Dev

在类构造函数中设置函数指针...'&':对绑定成员函数表达式的非法操作

来自分类Dev

构造函数中的虚拟成员,解决方法

来自分类Dev

构造函数,密封和属性中的虚拟成员调用

来自分类Dev

从类传递基本构造函数?

来自分类Dev

访问从模板类派生的类中的基本成员函数

来自分类Dev

基本接口类中缺少虚拟析构函数?

来自分类Dev

C ++:在基本模板类中调用派生的专用虚拟函数

来自分类Dev

如何比类中的成员变量更早地调用构造函数?

来自分类Dev

使用虚拟属性支持NHibernate代理;ReSharper警告构造函数中的虚拟成员调用

来自分类Dev

在派生类中绑定非静态模板成员函数

来自分类Dev

派生类中的基本构造函数调用

来自分类Dev

从构造函数 it-block 中的成员函数访问 Fantom 类的成员?

来自分类Dev

标准中有关“基本构造函数中的虚拟函数调用”的部分在哪里?

来自分类Dev

如何在类的构造函数中绑定用户提供的方法?

来自分类Dev

在继承时,基本构造函数调用虚拟方法,为什么类是Dervied并调用Dervied方法?

来自分类Dev

继承构造函数和虚拟基类

来自分类Dev

继承构造函数和虚拟基类

来自分类Dev

构造函数中的成员函数指针

来自分类Dev

对于没有任何构造函数的类,在C ++ 11中自动生成的类成员函数

来自分类Dev

常量类成员副本构造函数

来自分类Dev

从基类构造函数调用派生类的成员函数

来自分类Dev

在构造函数中绑定异步函数

来自分类Dev

C ++ 11:使用非静态成员函数作为类构造函数中的默认参数

Related 相关文章

  1. 1

    在基本构造函数中绑定虚拟类成员函数

  2. 2

    在派生类构造函数中设置基本成员

  3. 3

    解决构造函数中的虚拟成员调用

  4. 4

    解决构造函数中的虚拟成员调用

  5. 5

    从继承的类构造函数中调用lambda函数中的基本成员?

  6. 6

    在类定义中调用成员构造函数

  7. 7

    在类构造函数中设置函数指针...'&':对绑定成员函数表达式的非法操作

  8. 8

    构造函数中的虚拟成员,解决方法

  9. 9

    构造函数,密封和属性中的虚拟成员调用

  10. 10

    从类传递基本构造函数?

  11. 11

    访问从模板类派生的类中的基本成员函数

  12. 12

    基本接口类中缺少虚拟析构函数?

  13. 13

    C ++:在基本模板类中调用派生的专用虚拟函数

  14. 14

    如何比类中的成员变量更早地调用构造函数?

  15. 15

    使用虚拟属性支持NHibernate代理;ReSharper警告构造函数中的虚拟成员调用

  16. 16

    在派生类中绑定非静态模板成员函数

  17. 17

    派生类中的基本构造函数调用

  18. 18

    从构造函数 it-block 中的成员函数访问 Fantom 类的成员?

  19. 19

    标准中有关“基本构造函数中的虚拟函数调用”的部分在哪里?

  20. 20

    如何在类的构造函数中绑定用户提供的方法?

  21. 21

    在继承时,基本构造函数调用虚拟方法,为什么类是Dervied并调用Dervied方法?

  22. 22

    继承构造函数和虚拟基类

  23. 23

    继承构造函数和虚拟基类

  24. 24

    构造函数中的成员函数指针

  25. 25

    对于没有任何构造函数的类,在C ++ 11中自动生成的类成员函数

  26. 26

    常量类成员副本构造函数

  27. 27

    从基类构造函数调用派生类的成员函数

  28. 28

    在构造函数中绑定异步函数

  29. 29

    C ++ 11:使用非静态成员函数作为类构造函数中的默认参数

热门标签

归档