将VTable类铸造为void指针(C )
Casting vtable class to void pointer (C++)
我正在编写库,该库应该初始化一些数据并返回void指针。然后在C代码中使用指针。在库中,我想使用C 类来初始化此数据。
void *init()
{
return new MyData();
}
void fini(void *d)
{
MyData *m = reinterpret_cast<MyData *>(d);
delete d;
}
这起作用,而mydata是简单的类,而没有虚拟方法。但是现在我希望mydata成为抽象类的实现。
class Base // No virtual things
{
int val;
};
class A : public Base // Abstract class
{
virtual int x() = 0;
};
class B : public A // Implementation
{
int x() {return val;}
};
如果然后将此类施加到void*,则第一个数据的数据将不会反映基类的" val"变量。因为可vtable?很好,我知道这是错误的方式。有什么建议么?像
return static_cast<Base *>(new MyData);
似乎有效,但我还需要从void *重建mydata并正确删除它。C程序将仅使用MyData基部的值。
这是替代
void *init()
{
return new MyData();
}
void fini(void *d)
{
delete reinterpret_cast<MyData *>(d);
}
void *getbase(void *d)
{
MyData *m = reinterpret_cast<MyData *>(d);
return static_cast<Base *>(m);
}
,但是我想避免第三个功能。谢谢我的英语。
delete static_cast<A*>(static_cast<Base *>(d));
在所有测试中都有工作。感谢geza。
相关文章:
- 引用一个已擦除类型(void*)的指针
- 如何将指针从一个void函数传递到另一个C++
- 指针没有更新它在void函数内部指向的值
- 错误:在为指针赋值时,void值没有被忽略
- 为什么我们要为avl树实现返回一个指向节点的指针,而不是void函数
- 如何在 C++ 中将 void 函数传递给 void 指针
- 将通用引用强制转换为可调用的 void 指针,反之亦然
- C++为 void 指针分配一个字符串
- 为什么在将 void 指针转换为整数指针时出现分段错误
- 当我使用 void 函数的返回值(通过强制转换函数指针)时,究竟会发生什么?
- 调用向量的函数,给定向量的指针作为 void *
- 取消引用 void 指针以将值分配给结构
- 为什么新表达式可以正确生成指针类型,即使它应该返回 void*?
- C 与 C++,处理 void** 指针
- reinterpret_cast指向 void(*&)() 的成员函数指针
- 使用 void 指针:void **ptr.. 如何修改共享内存的值?
- 我可以将函数指针 void* 强制转换为 std::function 吗?
- void*不是一个指向对象类型的指针 - void **的铸造错误
- 如何使用空指针(void*)
- 指针(void指针)和函数有一点混淆