我目前正在编写一堆用于呈现和组织vertex
数据的函数和类。我还希望将这些函数和类提供为.lib
问题是这些函数和类需要在struct vertex
创建时知道.lib
的外观(即它的定义)(因为它们使用std::vector<Vertex>
)。
但是我想将库函数和类用于不同的vertex
定义,因为vertex
的属性可能会根据要绘制的模型而改变。
有没有办法在不确定.lib
结构的情况下构建vertex
?
答案 0 :(得分:0)
我原来的回答是假设模板,你说你没有使用。附注:使用类型Vertex
的模板可行,但库必须成为仅限标题的库。你应该认真考虑这个选择。
如果您不想要这个,那么也许接口方法可行(前提是您对性能损失感到满意)。例如,对于Vertex
:
class Vertex
{
public:
virtual double getX() = 0;
virtual double getY() = 0;
...
};
然后可能是一个创建它们的工厂:
class VertexFactory
{
public:
virtual Vertex* createVertex(double x, double y) = 0;
};
你的库可能有这样的代码:
void doStuff(VertexFactory* fac)
{
std::vector<Vertex*> vertices;
for(int i = 0, i < 100; ++i)
vertices.push_back(fac->createVertex(i, i));
//then do some other stuff
}
您的客户端代码可以像这样使用它:
class MyVertex : public Vertex
{
public:
double getX() override { return 1.0; }
double getY() override { return 2.0; }
};
class MyVertexFactory : public VertexFectory
{
public:
MyVertex* createVertex(double x, double y) override
{
return new MyVertex;
}
};
int main(int argc, const char** argv)
{
MyVertexFactory fac;
doStuff(&fac);
}
答案 1 :(得分:0)
你可以使它成为指针的矢量(或智能指针,但是你需要发布一些接口)。 另一个选择是从库中获取的对象是实际对象的存根。替代库需要在您的“pimpl”中工作。 但是,一堆函数不是非常面向对象的。您可以考虑发布一个接口类,这样您就可以拥有一个指向该接口的智能指针向量。