直接包装器在C++类中的作用
我正在尝试创建一个可以作为类成员调用的函数。下面是一些代码:直接包装器在C++类中的作用,c++,linux,windows,dynamic-library,C++,Linux,Windows,Dynamic Library,我正在尝试创建一个可以作为类成员调用的函数。下面是一些代码: #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 C
#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;
}
我做错了什么?sum不是类的数据成员,因此无法在构造函数的成员初始化列表中初始化它。不需要初始化sum,只需给它一个根据需要调用实函数的体,例如:
#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可以根据需要实现和导出CtStUM函数,而CCDASE类可以是一个只针对不同编译器更好的可移植性的头文件实现。C++中的变量类型永远不能是函数类型。您的CTest::sum是一个成员函数,而不是一个数据成员。我知道,当sum是指向函数的指针时,它没有指向类实例的指针,因为它不是作为方法而是作为变量解析的。当我调用instance.sum2,4时,程序只推送了4和2,不包括指向堆栈上类实例的指针。
#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;
}