std :: shared_ptr <void>用于转换自定义类型

时间:2017-02-25 03:03:27

标签: c++ c++11 pointers visual-studio-2015 shared-ptr

下午好,

所以我创建了一个库,需要在linux和windows下用作不同应用程序的APi作为命令行工具和gui。

在该库的内部,我有std::map个结构,它代表程序可以控制的物理对象。

我希望能够从Windows GUI应用程序中传递一些特殊类 ,但不能从任何其他应用程序传递。这个特殊类是一个名为3DModel

的direct3D类

所以我相信我不能在库中的任何地方引用这个类而不使用一堆#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

0 个答案:

没有答案