- 主题:今天掉进一个不算坑的坑
得亏我及时一通搜索搞定。是这样的:
有三个类 A, B, C,其中 A和B都非空,而C同时继承A和B,即 struct C : A, B {...};
那么从 C的指针 static_cast 到 B的指针是会改变指针的值的。我想计算这个偏移量(有几字节),于是我搞了这么个:
size_t offset = reinterpret_cast<size_t>(
static_cast<B*>(static_cast<C*>(nullptr)));
能看出这错误在哪儿吗?
--
FROM 138.19.103.*
多继承就是蛋疼。我一般没兴趣去研究错在哪里,直接奔着最佳实践去。我针对多继承的最佳实践是用模板:
template<typename Base>
class XxooMixin: public Base {};
class Derived: public XxooMixin<Base> {};
这样子把多继承变成了三个层次的继承。坏处是 Mixin 只能写在 .h 头文件里面,没法写到 .cpp 里面了。
【 在 fanci (大葡萄) 的大作中提到: 】
: 得亏我及时一通搜索搞定。是这样的:
: 有三个类 A, B, C,其中 A和B都非空,而C同时继承A和B,即 struct C : A, B {...};
: 那么从 C的指针 static_cast 到 B的指针是会改变指针的值的。我想计算这个偏移量(有几字节),于是我搞了这么个:
: ...................
--
FROM 110.81.42.*
没看懂你的思路。
指针不总是4字节8字节吗? sizeof(int)
nullptr 是个结构体,隐式转换T* 的operator,用整型0转。
C*转B*,还是个int 0。接着reinterpret_cast,就是将连续的
32bit/64转为size_t,还是0?
【 在 fanci 的大作中提到: 】
: 得亏我及时一通搜索搞定。是这样的:
: 有三个类 A, B, C,其中 A和B都非空,而C同时继承A和B,即 struct C : A, B {...};
: 那么从 C的指针 static_cast 到 B的指针是会改变指针的值的。我想计算这个偏移量(有几字节),于是我搞了这么个:
: ...................
--
FROM 1.85.205.*
reinterpret_cast<size_t*> ?
【 在 fanci 的大作中提到: 】
: 得亏我及时一通搜索搞定。是这样的:
: 有三个类 A, B, C,其中 A和B都非空,而C同时继承A和B,即 struct C : A, B {...};
: 那么从 C的指针 static_cast 到 B的指针是会改变指针的值的。我想计算这个偏移量(有几字节),于是我搞了这么个:
: ...................
--
FROM 42.234.94.*
可以,也可以用curiously recursive pattern实现mixin
【 在 hgoldfish () 的大作中提到: 】
: 多继承就是蛋疼。我一般没兴趣去研究错在哪里,直接奔着最佳实践去。我针对多继承的最佳实践是用模板:
:
: template<typename Base>
: class XxooMixin: public Base {};
--
FROM 203.145.95.*
答案是对的,结果总是零。
【 在 DoorWay () 的大作中提到: 】
: 没看懂你的思路。
: 指针不总是4字节8字节吗? sizeof(int)
: nullptr 是个结构体,隐式转换T* 的operator,用整型0转。
: C*转B*,还是个int 0。接着reinterpret_cast,就是将连续的
--
FROM 203.145.95.*
CRTP是模板类在冒号后;这个是冒号前,fluent cpp称之为mix-in。
不知道是不是已经成为约定俗成的了,新的cpp idiom. 还是一家之言。
那文章的名字用了个单词YANG, mix-in: The YANG of the CRTP.
给我唬住了。查了下,原来是太极阴阳的阳…… CRTP是阴YAN :-D
【 在 fanci 的大作中提到: 】
: 可以,也可以用curiously recursive pattern实现mixin
--
FROM 124.114.151.*
实例指针可以,0指针不行
【 在 DoorWay () 的大作中提到: 】
: 换个实例指针可以吗?为什么? 不是把B的地址(32或64bit)解释为size_t了吗?还是用户空间的地址,肯定是个很大的数字哦。
: 直觉是与sizeof(A),sizeof(B)有关系。
: 计算的话是用仨指针转整型作差吧?
: 【 在 fanci 的大作中提到: 】
--
FROM 203.145.95.*