我正在使用模板联合,以确保自己始终获得一个用于指针的64位字段(即使在32位计算机上,因为发生了向64位计算机的数据传输),并且保存了用户和我自己铸件。
template <typename type> union lrbPointer
{
uint64_t intForm;
type ptrForm; //assumed that type is a pointer type
};
//usage
lrbPointer<int*> myPointer;
int integers[4];
myPointer.ptrForm = integers;
myPointer.intForm += 2; //making it easy to jump by less then sizeof(int)
这对我来说很好,但是我真的很想找到一种方法来成为默认成员。因此,用户无需在希望使用的指针后面使用.ptrForm。
最佳答案
您可以将转换运算符与构造函数一起使用,以便可以在类型之间进行转换:
template <typename PtrType>
union IntPointer
{
uint64_t intForm;
PtrType ptrForm;
IntPointer(PtrType ptr) :
ptrForm(ptr)
{
}
operator PtrType(void) const
{
return ptrForm;
}
};
int main(void)
{
IntPointer<float*> f = new float; // constructor
float *theFloat = f; // conversion operator
delete theFloat;
}
话虽如此,我认为你在薄弱的地面上踩。 :|