我注意到我可以通过将复杂的对象隐藏在我的类中的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
}
答案 0 :(得分:1)
你会得到很多人建议你不这样做,但我分担你的痛苦。除了编译时间之外,仔细设计和使用一层typedef,模板甚至宏都可以生成代码,其中业务逻辑更容易理解,即使底层代码不是这样。你会偶尔看到奇怪的编译错误,但在我看来,在精心挑选的情况下,这种努力是值得的。
话虽如此,你所尝试的并不一定容易实现。如果您要使用宏,您希望以一种方式标记它们,使用它们的人知道他们正在玩什么。
这样的事情有用吗?
#define Triangulation_Ptr (Triangulation * )(&amp; this-&gt; Triangulation_Ptr)
部分问题是这些是指向成员的指针,它们与普通指针实际上并不相同。