使用.lib中未定义的类/结构
Using class/struct not defined in .lib
我目前正在编写一堆功能和类,用于渲染和组织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);
}
相关文章:
- vscode g++链路故障:体系结构x86_64的未定义符号
- 体系结构x86_64的未定义符号:std:terminate(),typeinfo,运算符delete[],运算符new
- 对结构方法的未定义引用
- OSX clang++:用于 cpp 文件中显式实例化模板的体系结构x86_64的未定义符号
- PCL 出错:体系结构x86_64 @pcl的未定义符号
- clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用) - 体系结构的未定义符号 x86_64:
- 体系结构x86_64的未定义符号:链接器错误
- C++ std::vector<int> 体系结构的未定义符号 x86_64:
- 将结构 std::memcpy 转换为具有足够容量的 std::vector 是未定义的行为<char>吗?
- 生成文件:体系结构x86_64的未定义符号
- Xcode"体系结构x86_64的未定义符号"
- 体系结构x86_64的未定义符号:找不到原因
- 体系结构x86_64的未定义符号:c++/ h 文件和 cpp 文件
- 具有未声明/未定义类型的 typedef 结构
- 未定义的引用,尝试创建类似结构的向量
- 无法生成项目,出现错误 - 未定义的体系结构符号 x86_64:"_JNI_CreateJavaVM"
- C :用于体系结构错误的经典未定义符号
- "提示"使用未定义的结构 - winSock
- 体系结构错误的未定义符号
- CLang++ 链接器未定义的符号用于体系结构x86_64