使用.lib中未定义的类/结构

Using class/struct not defined in .lib

本文关键字:结构 未定义 lib 使用      更新时间:2023-10-16

我目前正在编写一堆功能和类,用于渲染和组织vertex数据。我也想提供这些功能和类作为.lib
问题在于,这些功能和类需要知道struct vertex.lib创建时间(因为它们使用std::vector<Vertex>)的外观(即其定义)。
但是,我想将库函数和类用于不同的vertex定义,因为vertex的属性可能会根据要绘制的模型而改变。

是否有任何方法可以在不确定vertex结构的情况下构建.lib

您可以使其成为指针的向量(或智能指针,但随后您需要发布一些接口)。另一个选择是,您从库中返回的对象是对实际对象的存根。替代图书馆需要在您的" pimpl"中工作。但是,一堆功能不是非常面向对象的。您可以考虑发布接口类,以便您可以将智能指针的向量到接口。

我的原始答案是假设模板,您说您不使用。旁注:使用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);
}