编辑:我正在使用C++.
所以,我正在创建方法/函数来测试形状之间的交集.我基本上有这个:
class Shape {};
class Rectangle : public Shape {};
class Circle : public Shape {};
class Line : public Shape {};
Run Code Online (Sandbox Code Playgroud)
现在,我需要决定编写实际方法/函数来测试交集的最佳方法.但是我的所有形状都将存储在Shape指针列表中,因此我将调用基本形式的方法/函数:
bool intersects (Shape* a, Shape* b);
Run Code Online (Sandbox Code Playgroud)
那时,我需要确定哪种类型的形状'a'和'b',所以我可以正确地检测碰撞.我只需使用一些虚拟方法就可以轻松完成其中一个:
class Shape
{
virtual bool intersects (Shape* b) = 0;
}
Run Code Online (Sandbox Code Playgroud)
这将确定其中一个形状('a'现在是'this').但是,我仍然需要获得'b'的类型.显而易见的解决方案是给Shape一个'id'变量来分类它是什么形状,然后'切换'通过那些,然后使用dynamic_cast.然而,这不是很优雅,感觉应该有更多的OO方式来做到这一点.
有什么建议?
好的,这就是我在代码中所拥有的:
public void makeObject(int i){
String s = getString(i); //This returns the name of a class
new s(); //This is what I want to do
}
Run Code Online (Sandbox Code Playgroud)
我可以这样做吗?
我刚刚成功安装了LLVM(3.0),并获得了Hackage绑定(3.0.0.0).但是,当我尝试使用它时,我收到以下链接器错误:
加载包llvm-base-3.0.0.0 ...无法加载.so/.DLL :( dlopen(lib.dylib,9):找不到图像)
"for:"之后没有名字,这令人沮丧,因为我不知道它找不到什么.我知道没有太多信息可以继续,但是有谁知道为什么会发生这种情况?
我正在运行Mac OS X,以防万一.