C++类的成员函数访问与类的强制类型转换相关的问题
我看到一种写法 觉得很奇怪 不理解其原理 请大家点评一下
//================================
//Processor.h
class Processor
{
//......
//.....
public:
static UINT __stdcall foo_process_wrapper(LPVOID param);
private:
void foo_process(LPVOID param);
}
extern Processor Proc;
//=============================
//=========================
//Processor.cpp
UINT __stdcall Processor::foo_process_wrapper(LPVOID param)
{
((Processor *)param)->foo_process( (my_param_type *)param );
}
Processor Proc;
//===========================然后再某地方使用这个类
//================================
//test.cpp
#include "Processor.h"
int main()
{
int Threadaddr;
HANDLE m_handle;
char * buf = "test";
m_handle=(HANDLE)_beginthreadex
(NULL,256000,Proc.foo_process_wrapper,(LPVOID)
buf,0,&Threadaddr);
}
//================================这样一来线程成功执行foo_process里的代码,建立多个线程也正常没有冲突
而我理解的Processor::foo_process_wrapper中的param参数理应是 传入的buf 他被转换成my_pargam_type也就是char*之后也能正常得到值
为什么可以用((Processor *)param)->foo_process这种方式访问成员函数呢
我再试过直接Processor * Ptest;
然后直接用(Processor *)Ptest->foo_process 程序是会出现内存访问错误崩溃的.
具体是什么个原理 和__stdcall的foo_process_wrapper压入栈的参数有关吗
然后我又测试了下 应该个__stdcall压入栈的参数没关 都自动处理过了
之前内存访问错误是因为指针没有分配内存空间
那么我随便给个空间就好了于是我定义了一个char* Ptest="test";
这样就有内存空间了,然后再强制转换(Processor *)Ptest->foo_process 就一切执行正常
是否是只要任何内容非空的可访问指针 都可以转换成Processor类型并访问类成员? 这其中的原理是什么?到底如何转换的?
...全文
相关推荐
C++对象模型详解[收集].pdf
虚继承的引入正是为了解决多重继承时可能产生的菱形继承问题。虚继承确保了基类只有一份实例,无论它在继承体系中出现多少次。C++中的内存布局不仅与继承方式有关,还与成员变量和成员函数的排列顺序紧密相关。
C++静态函数访问非静态成员方法[可运行源码]
在C++编程语言中,静态成员函数是类的成员函数,但它不与类的任何特定对象相关联,其访问范围限定于类作用域内,不能访问类的非静态成员变量和成员函数,因为非静态成员函数和成员变量是与特定对象实例关联的。
C++高级程序设计实验报告实验十 多态性-类型转换与虚函数
- **问题五**:第④处的转换过程与第③类似,都是先使用强制类型转换,然后再通过构造函数进行赋值。2.
C++四种强制类型转换
C++中的四种强制类型转换是程序设计中必不可少的工具,它们分别是`static_cast`、`const_cast`、`dynamic_cast`和`reinterpret_cast`。
C++ 四种强制类型转换的总结
### C++ 四种强制类型转换的总结在C++编程语言中,为了实现不同数据类型之间的转换,提供了四种不同的强制类型转换操作符:`static_cast`、`const_cast`、`dynamic_cast


