[英]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.