在c++类中直接包装函数
Direct wrapper to function in C++ 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
不是类的数据成员,因此不能在构造函数的成员初始化列表中初始化它。不需要初始化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然后可以实现和导出CTestSum()
函数的需要,并且您的CTest
类可以是一个头文件的实现,以便更好地跨不同的编译器的可移植性。
相关文章:
- 我的包装函数缺少变量?
- 为什么这个"ctypes"包装函数的返回值是"c_long(0)"而不是&quo
- 如何将包装类的对象用作包装函数中的参数
- 包装C++函数以使用 SWIG 获取 Lua 字符串表
- 带有默认参数的宏包装函数调用
- 如何使用模板函数参数编写包装函数,该功能可以采用超载的成员函数
- 创建一个__cdecl以在 C++ 上__thiscall包装函数
- 在C++中实现和包装函数组合以进行惰性计算
- c++11:如何编写一个包装函数来生成"std::function"对象
- 为什么 Dart 中的原生包装函数与非常轻量级的函数相比"DEFINE NATIVE ENTRY"如此重量级?
- 在 C++ 中使用 map,并提供包装函数以在 C 语言中使用它
- 包装函数只有在链接为静态时才从链接库调用
- 尝试包装函数返回值时出现"<类名>不提供调用运算符"错误
- 交叉编译器/平台裸包装函数,无条件跳转到函数指针
- realloc C 函数的可能包装函数有什么错误?
- 包装 C++ 函数以在 C# 中使用
- 采用"pass by reference"值的递归函数的包装函数
- C++包装函数(宏)来访问 COM 对象属性
- 包装函数指针和函数对象在泛型代码中是如何工作的
- 在c++类中直接包装函数