在 C++ 中直接包装函数 class

Direct wrapper to function in C++ class

我正在尝试制作一个可以作为 class 成员调用的函数。这是一些代码:

#include <iostream>
using namespace std;

class CTest;
void CTestSum(CTest* ptr, int a, int b);

class CTest{
public:
    int i;
    void sum(int a, int b);
    CTest() : i(0), sum(CTestSum)
    {
    }
};

void CTestSum(CTest* ptr, int a, int b)
{
    ++ptr->i;
    cout << (ptr->i)+a+b << endl;   
}

int main() {
    CTest instance;
    instance.sum(2, 4);

    return 0;
}

最终,该函数将在 dll 或库中结束。另见 http://ideone.com/csueum 编译失败,出现以下错误消息:

prog.cpp: In constructor 'CTest::CTest()':
prog.cpp:12:18: error: class 'CTest' does not have any field named 'sum'
  CTest() : i(0), sum(CTestSum)

我做错了什么?

sum不是class的数据成员,所以不能在构造函数的成员初始化列表中初始化它。不需要初始化sum(),直接给它一个body,根据需要调用真正的函数,eg:

#include <iostream>

using namespace std;

class CTest;
void CTestSum(CTest* ptr, int a, int b);

class CTest{
public:
    int i;
    void sum(int a, int b) { CTestSum(this, a, b); }
    CTest() : i(0)
    {
    }
};

void CTestSum(CTest* ptr, int a, int b)
{
    ++ptr->i;
    cout << (ptr->i)+a+b << endl;   
}

int main() {
    CTest instance;
    instance.sum(2, 4);

    return 0;
}

您的 DLL 然后可以根据需要实现和导出 CTestSum() 函数,并且您的 CTest class 可以是 header-only 实现,以便在不同编译器之间实现更好的可移植性。