用宏遮蔽void*指针的机制
Mechanism to shadow a void* pointer with a macro
我注意到,通过将复杂对象隐藏为类中的void*
指针,并在单独的cpp中处理它们,我可以(显着)加快编译时间。前向声明这些类太难维护了。
使用宏有时有效,但有时不起作用。有人知道用强制转换来遮蔽变量的方法吗这样我就能得到l-value
了?有什么我可以做的结构,有一个隐式强制转换运算符,可以给我一个l-value
。有没有什么我没看到的典型方法来处理这些问题?
struct K : CGAL::Exact_predicates_inexact_constructions_kernel {};
typedef CGAL::Delaunay_triangulation_2<K> Triangulation;
typedef Triangulation::Vertex_handle Vertex_handle;
#define Triangulation_Ptr (static_cast<Triangulation*>(this->Triangulation_Ptr))
void MyClass::cleanTriangulation()
{
delete Triangulation_Ptr;//works, this->Triangulation_Ptr is a void*
}
void MyClass::addToTriangulation(int idx, MyPoint l)
{
if (Triangulation_Ptr == nullptr)
{
Triangulation_Ptr = new Triangulation;// No a l-value, doesn't compile
}
//something, that adds a point
}
你会得到很多人建议你不要这样做,但我分担你的痛苦。除了编译时间之外,仔细设计和使用类型、模板甚至宏层可以生成业务逻辑更容易理解的代码,即使底层代码不容易理解。您可能会偶尔出现奇怪的编译错误,但在我看来,在精心选择的情况下,这些努力是值得的。
话虽如此,你想要的并不一定容易实现。如果你打算使用宏,你想用一种方式标记它们,让那些使用它们的人知道他们在玩什么。
这样的东西有用吗?
#define Triangulation_Ptr (Triangulation*)(&this->Triangulation_Ptr)
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- QMetaObject invokeMethod的基于函数指针的语法
- 如何从 std::atomic 中提取指针 T<T>?
- 使用共享指针时,从共享指针本身释放内存的机制是什么
- 将派生的对象地址分配给基础指针和调用击路仪的机制
- 可视C++指针机制 - 错误 2440
- 无法理解指针机制
- C++ 状态模式实现:指向状态机的指针机制变得无效
- 用宏遮蔽void*指针的机制
- 指针解引用:编译器的实际机制
- 使C函数指针与C++中基于C样式堆栈的调用机制一起工作