是否可以导出包装类的结构而不包装它(struct只包含枚举和原语)?假设我的包装器看起来像这样:
WorkerWrapper.h
#ifdef TESTEXPORTDLL_EXPORTS
#define TESTEXPORTDLL_API __declspec(dllexport)
#else
#define TESTEXPORTDLL_API __declspec(dllimport)
#endif
class Worker;
struct JobTypeInfo;
template class TESTEXPORTDLL_API std::unique_ptr<Worker>;
class TESTEXPORTDLL_API WorkerWrapper {
private:
std::unique_ptr<Worker> fWorker;
public:
WorkerWrapper();
~WorkerWrapper();
WorkerWrapper(WorkerWrapper&& aThat);
WorkerWrapper& operator= (WorkerWrapper&& aThat);
void DoJob(JobTypeInfo aTypeInfo);
};
使用WorkerWrapper.cpp
unique_ptr
定期实施处理std::move
,这不是我提问的原因。 Worker
类在WorkerWrapper
中向前声明,并包含我要导出的结构。
Worker.h
struct JobTypeInfo
{
typedef enum
{
DoThis,
DoThat,
DoNothing
} CalcType;
CalcType sCalcType;
//... primitives
};
class Worker
{
public:
void DoJob(JobTypeInfo aTypeInfo);
};
我可以在这做什么?
提前致谢。
答案 0 :(得分:2)
如果没有包含的方法,导出struct
不会做任何事情 - 导出class
表示导出其所有方法及其typeinfo
(如果它包含 vtable < / em>的
以这种方式导出WorkerWrapper
也存在问题,因为std::unique_ptr<Worker>
未导出。如果您没有任何内联方法(包括默认实现),它将起作用,但MSVC将为您提供warning C4251。
尝试仅传递接口指针。虚拟析构函数是可以的,因为他们称之为正确的解除分配器。
答案 1 :(得分:0)
我只是通过将struct解压缩到自己的头文件中来解决它。