下午好,
所以我创建了一个库,需要在linux和windows下用作不同应用程序的APi作为命令行工具和gui。
在该库的内部,我有std::map
个结构,它代表程序可以控制的物理对象。
我希望能够从Windows GUI应用程序中传递一些特殊类 ,但不能从任何其他应用程序传递。这个特殊类是一个名为3DModel
所以我相信我不能在库中的任何地方引用这个类而不使用一堆#define _WIN64
等等。也许如果我使用前向声明?
该库也没有对该对象做任何事情,该对象在Windows GUI应用程序中创建并完全传递到库以用于组织目的(以防止创建重复的std::map
结构只是为了存储这些然后它被windows GUI应用程序调用以进行渲染等等。
其他应用不会创建此对象,因为他们只会将nullptr
传递给它,而不会使用它。
所以我的问题是,在库中,我可以使用函数参数,std::map
结构等,使用std::shared_ptr<void>
。
然后在Windows GUI中,我会创建一个std::shared_ptr<Model3D>
,将其强制转换为std::shared_ptr<void>
,必要时将其转换为std::shared_ptr<Model3D>
,然后再使用它进行渲染?
这是道德的吗?还有更好的选择吗?我听到了boost::any
的建议,但尚未使用它。我在代码中的任何地方都没有提升,有没有标准替代方案?
或者这种情况我会在库中声明3DModel
类,但绝不会#include "3DModel.h"
?
谢谢, -D