将基类指针强制转换为类成员的指针
Casting base class pointer to pointer of class member
问题:
我们确实有一个基于模板的类,它提供了一些关于基元类型的功能(例如序列化、反序列化…)
template <typename PRIM_TYPE> class WrappedPrimitive
{
public:
PRIM_TYPE v;
//lots of other methods, including serialization and deserialization
PRIM_TYPE & operator= (const PRIM_TYPE & value) { v = value; return v; }
operator PRIM_TYPE() const { return v; }
};
typedef WrappedPrimitive<float> WrappedPrimitiveFloat;
假设我有一个功能
void maninpulateFloat(float *f) {*f = 5.0f;}
有没有办法添加一些类函数,使其在从*WrappedPrimitiveFloat
转换为*float
时返回v
成员的地址。(或者一般从*WrappedPrimitive<PRIM_TYPE>
到*PRIM_TYPE
?
WrappedPrimitiveFloat myfloat;
manipulateFloat(&myfloat.v) // This works
manipulateFloat(&myfloat) // Is there any way to make this work?
背景:
我知道这可能不是一个好主意,但我之所以喜欢它,是因为我们将代码移植到了Linux,在那里myfloat实际上是一个float,而不是一些封装的值。现在,我们需要用来区分这些地方
#ifdef _WIN32
manipulateFloat(&myfloat.v)
#else
manipulateFloat(&myfloat)
#endif
这也真的很丑陋。或者,我会很高兴有一行代码可以在Windows/Linux上运行。
我尝试过的
有可能使操作者&功能,
PRIM_TYPE * operator& () {return &v;}
但是根据这篇文章重载一元运算符&这不是最好的主意,因为使用&将始终返回CCD_ 6。
您可以实现模板get_address()
函数,并在需要的任何地方使用它,而不是一元&
:
template <typename PRIM_TYPE> class WrappedPrimitive
{
public:
operator PRIM_TYPE() const { return v; }
// these conversions are necessary to implement
operator PRIM_TYPE&() { return v; }
operator const PRIM_TYPE&() const { return v; }
};
template <typename PRIM_TYPE>
PRIM_TYPE* get_address(PRIM_TYPE& v) {
return &v;
}
template <typename PRIM_TYPE>
PRIM_TYPE* get_address(WrappedPrimitive<PRIM_TYPE>& wp) {
return &static_cast<PRIM_TYPE&>(wp);
}
template <typename PRIM_TYPE>
const PRIM_TYPE* get_address(const WrappedPrimitive<PRIM_TYPE>& wp) {
return &static_cast<const PRIM_TYPE&>(wp);
}
演示
相关文章:
- 如果基类包含双指针成员,则派生类的构造函数
- C++正确的指针成员初始化
- 是否可以使用智能指针成员设置具有另一个结构的结构?
- 为什么 operator() 处的指针成员不起作用?
- 更改队列指针成员的值需要在 C++ 中出现奇怪的错误
- 如何从另一个嵌套类中调用某个封闭类的嵌套类的函数指针成员的值?
- 结构对象的指针成员在传递给函数时被修改
- 参数的混合值,当我调用指针成员函数时
- 如何正确使用结构的共享指针成员?
- C++:私有类指针成员返回未定义的值
- 在函数中传递带有指针成员的结构是浅拷贝或深拷贝在 C 中
- 包含指针成员的嵌套结构
- 在 c++ 中,为什么 -> 被称为二进制中缀指针成员访问运算符?
- C++ 类指针成员行为奇怪(错误)
- 常量结构的指针成员
- 在类C++指针成员中
- 指针成员未在复制构造函数中初始化
- C++移动拥有指针成员的构造函数
- C++ 包含唯一指针成员变量的类的赋值运算符
- 如何使用 QPoint 指针成员对类进行排队和取消排队