小编Vis*_*war的帖子

有没有办法在没有.*或 - >*运算符的情况下调用成员函数

下面D::foo通过指向成员函数调用函数的方法将产生错误:必须使用.*->*调用'f(...)'中的指针到成员函数... 当然这不是我们如何调用指针到 -成员职能.

正确的呼叫方式是(d.*f)(5);OR(p->*f)(5);

我的问题是,'有没有办法在没有左侧的类对象的情况下调用类的成员函数?我想知道我们是否可以将class object(this)作为常规参数传递?

在我看来,在一天结束时(在汇编/二进制级别),类的所有成员函数都是普通函数,它们应该在n + 1个参数上运行,其中(+ 1表示this)

如果我们谈论D::foo下面的函数,在汇编/二进制级别它应该运行两个参数:

  1. 类对象本身(指向D类对象的指针this)
  2. int.

那么,有没有一种方法(或hack)调用D::foo传递给它的类对象作为函数参数而不是. or -> or .* or ->*在类对象上使用运算符?

示例代码:

#include <iostream>
using namespace std;

class D {
    public:
        void foo ( int a ) {
            cout << "D" << endl;
        }

        int data;
};


//typedef void  __cdecl ( D::*  Func)(int);
typedef void ( D::* …
Run Code Online (Sandbox Code Playgroud)

c++ boost cdecl

10
推荐指数
2
解决办法
2452
查看次数

标签 统计

boost ×1

c++ ×1

cdecl ×1