在 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 实现,以便在不同编译器之间实现更好的可移植性。
我正在尝试制作一个可以作为 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 实现,以便在不同编译器之间实现更好的可移植性。