簡體   English   中英

使用.lib中未定義的類/結構

[英]Using class/struct not defined in .lib

我目前正在編寫一堆用於渲染和組織vertex數據的函數和類。 我還想將這些函數和類作為.lib
問題在於這些函數和類需要知道.lib創建時struct vertex外觀(即其定義)(因為它們使用了std::vector<Vertex> )。
不過,我想用不同的庫函數和類vertex定義自的性能vertex可能因吸引哪種模式改變。

有什么方法可以建立.lib而無需確定vertex結構?

我最初的答案是假設模板,您說您沒有使用它們。 旁注:為您的類型使用模板可以使用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);
}

您可以將其設為指針(或智能指針)的向量,但隨后需要發布一些接口。 另一個選擇是,您從庫中獲取的對象是實際對象的存根。 備用庫需要在您的“ pimpl”中工作。 但是,一堆函數並不是非常面向對象的。 您可能考慮發布接口類,以便可以擁有指向該接口的智能指針。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM