내 원래 대답은 당신이 사용하지 않는 템플릿이라고 가정합니다. 참고 사항 : 유형이 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);
}
''Vertex''를 가능한 모든 데이터의 합집합으로 만들지 않는 한, 각 정점 조직마다 고유 한 구조체가 필요하므로''std :: vector <>''의 고유 한 인스턴스가 필요합니다. 유연한 레이아웃 (즉, 정점 버퍼)과 함께 '일반 바이너리 블롭'을 사용하고 입력 레이아웃 설명과 함께''std :: vector ''으로 전달할 수 있습니다. 몇 가지 예를 보려면 [DirectXMesh] (https://github.com/Microsoft/DirectXMesh)와 [DirectXTK] (https://github.com/Microsoft/DirectXTK)를 참조하십시오. –