函数的动态链接如下:(经调试已经正常运行)
如下:
#include "stdio.h"void Test1()
{
printf("Function is Test1.\n");
}
void Test2()
{
printf("Function is Test2.\n");
}
void Test3()
{
printf("Function is Test3.\n");
}
typedef void(*lpTestFunc[])();
lpTestFunc TestFunc = {Test1,Test2,Test3};
int main(int argc, char* argv[])
{
for(int i = 0;i < 3;i ++)
{
TestFunc[i]();
}
getchar();
return 0;
}
我要把上面这段程序封装成一个CTest的类 我尝试改写如下:
class CTest
{
typedef void(CTest::* lpTestFunc[])(void);
public:
CTest()
{
TestFunc[0] = &CTest::Test1;
TestFunc[1] = &CTest::Test2;
TestFunc[2] = &CTest::Test3;
}
public:
lpTestFunc TestFunc;
private:
void Test1()
{
printf("Function is Test1.\n");
}
void Test2()
{
printf("Function is Test2.\n");
}
void Test3()
{
printf("Function is Test3.\n");
}
};
我在main函数中应该如何调用呢?
int main()
{
CTest ct;
for(int i = 0;i < 3;i ++)
{
}
return 0;
}
谢谢指教。我的QQ52418130,Email:[email protected]
如下:
#include "stdio.h"void Test1()
{
printf("Function is Test1.\n");
}
void Test2()
{
printf("Function is Test2.\n");
}
void Test3()
{
printf("Function is Test3.\n");
}
typedef void(*lpTestFunc[])();
lpTestFunc TestFunc = {Test1,Test2,Test3};
int main(int argc, char* argv[])
{
for(int i = 0;i < 3;i ++)
{
TestFunc[i]();
}
getchar();
return 0;
}
我要把上面这段程序封装成一个CTest的类 我尝试改写如下:
class CTest
{
typedef void(CTest::* lpTestFunc[])(void);
public:
CTest()
{
TestFunc[0] = &CTest::Test1;
TestFunc[1] = &CTest::Test2;
TestFunc[2] = &CTest::Test3;
}
public:
lpTestFunc TestFunc;
private:
void Test1()
{
printf("Function is Test1.\n");
}
void Test2()
{
printf("Function is Test2.\n");
}
void Test3()
{
printf("Function is Test3.\n");
}
};
我在main函数中应该如何调用呢?
int main()
{
CTest ct;
for(int i = 0;i < 3;i ++)
{
}
return 0;
}
谢谢指教。我的QQ52418130,Email:[email protected]
(用BCB 有_closure 关键字,可以指向类内的函数的指针)
2.类内封装时,TestFunc不确定数组大小,可能会越界
3.类内可用static封装
以下程序可以通过
#include <stdio.h>
class CTest
{
typedef void(*lpTestFunc[3])(void);
public:
CTest()
{
TestFunc[0] = &CTest::Test1;
TestFunc[1] = &CTest::Test2;
TestFunc[2] = &CTest::Test3;
}
public:
lpTestFunc TestFunc;
private:
static void Test1()
{
printf("Function is Test1.\n");
}
static void Test2()
{
printf("Function is Test2.\n");
}
static void Test3()
{
printf("Function is Test3.\n");
}
};int main()
{
CTest ct;
for(int i = 0;i < 3;i ++)
{
ct.TestFunc[i]();
}
return 0;
}
TestFunc[0] = &CTest::Test1;
TestFunc[1] = &CTest::Test2;
TestFunc[2] = &CTest::Test3;
可简写为
TestFunc[0] = Test1;
TestFunc[1] = Test2;
TestFunc[2] = Test3;用BCB就可写成以下的,(我以前也研究过VC,没找到指向类内函数指针的定义)#include <stdio.h>
class CTest
{
typedef void(__closure * lpTestFunc[3])(void);
public:
CTest()
{
TestFunc[0] = Test1;
TestFunc[1] = Test2;
TestFunc[2] = Test3;
}
public:
lpTestFunc TestFunc;
private:
void Test1()
{
printf("Function is Test1.\n");
}
void Test2()
{
printf("Function is Test2.\n");
}
void Test3()
{
printf("Function is Test3.\n");
}
};int main()
{
CTest ct;
for(int i = 0;i < 3;i ++)
{
ct.TestFunc[i]();
}
return 0;
}
class CTest
{
typedef void(__closure* lpTestFunc[3])(void);
public:
CTest()
{
///TestFunc = {&CTest::Test1,&CTest::Test2,&CTest::Test3};
TestFunc[0] = Test1;
TestFunc[1] = Test2;
TestFunc[2] = Test3;
}
public:
lpTestFunc TestFunc;
private:
void Test1()
{
printf("Function is Test1.\n");
}
void Test2()
{
printf("Function is Test2.\n");
}
void Test3()
{
printf("Function is Test3.\n");
}
};int main(int argc, char* argv[])
{
CTest ct;
for(int i = 0;i < 3;i ++)
{
ct.TestFunc[i]();
}
getchar();
return 0;
}如果成员函数改称static声明 编译无法通过错误代码为:
E2034 Cannot convert 'void (*)()' to 'void (* (_closure )())()'