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

时间:2017-11-21 14:47:50

标签: c++ directx-11

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

有没有办法在不确定.lib结构的情况下构建vertex

2 个答案:

答案 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”中工作。 但是,一堆函数不是非常面向对象的。您可以考虑发布一个接口类,这样您就可以拥有一个指向该接口的智能指针向量。