[疑难] 如何通过模板自动生成c++可以用的VTable
heroboy
2007-10-03
虽然C++没有abi,但是对于vptr的位置,所以编译器还是基本上是统一的,这也是com存在的基础,你研究一下com,就可以知道了。
gc的话很简单,在构造函数中:gc.addRoot(this) 在Release中:gc.removeRoot(this) |
|
tomqyp
2007-10-03
因为我也为D和C++的资源不能共用烦恼,所以对lz的方法很感兴趣,绝对不是想跟楼主抬杠,因为对相关的C++对象模型知识不了解,所以还特别去找了找相关了资料,在学习的过程中发现不同的编译器生成的类vptr位置确实不同,比如vc和bcb在头部,而GCC和DEC在类的尾部,同时不编译器对于不同情况下生成的vptr也有些不同,具体细节不记得了晚上再找找,这里有一个简单的判断vptr位置的例子:
http://www.devx.com/tips/Tip/14876 对于楼主的回复我又产生了一个新问题,既然不同编译器生成的类结构不同,那么COM是如果做到跨编译器的呢?是不是有特别的规定,google了一下没找到相关的结果,还请知道的朋友解惑. |
|
h_rain
2007-10-04
http://h-rain.iteye.com/blog/73268
看看这个,关于D的接口与C++接口. |
|
heroboy
2007-10-05
tomqyp 写道 因为我也为D和C++的资源不能共用烦恼,所以对lz的方法很感兴趣,绝对不是想跟楼主抬杠,因为对相关的C++对象模型知识不了解,所以还特别去找了找相关了资料,在学习的过程中发现不同的编译器生成的类vptr位置确实不同,比如vc和bcb在头部,而GCC和DEC在类的尾部,同时不编译器对于不同情况下生成的vptr也有些不同,具体细节不记得了晚上再找找,这里有一个简单的判断vptr位置的例子:
http://www.devx.com/tips/Tip/14876 对于楼主的回复我又产生了一个新问题,既然不同编译器生成的类结构不同,那么COM是如果做到跨编译器的呢?是不是有特别的规定,google了一下没找到相关的结果,还请知道的朋友解惑. com使用的是接口而不是类.对于接口只有一个vptr的成员.所以也无所谓在哪里了. |
|
tomqyp
2007-10-06
heroboy 写道 com使用的是接口而不是类.对于接口只有一个vptr的成员.所以也无所谓在哪里了. 明白了,感觉COM的设置实在是太巧妙了,谢谢~ |