gpt4 book ai didi

c++ - 如何使用包装类中定义的 __declspec(dllexport) 结构导出?

转载 作者:行者123 更新时间:2023-11-28 00:09:19 25 4
gpt4 key购买 nike

是否可以在不包装的情况下导出包装类的结构(结构仅包含枚举和基元)?假设我的包装器看起来像这样:

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 是通过使用 std::move 定期实现处理 unique_ptr 的,这不是我提出问题的原因。 Worker 类在 WorkerWrapper 中向前声明并包含一个我要导出的结构。

Worker.h

struct JobTypeInfo
{
typedef enum
{
DoThis,
DoThat,
DoNothing
} CalcType;
CalcType sCalcType;

//... primitives
};

class Worker
{
public:
void DoJob(JobTypeInfo aTypeInfo);
};

我可以在这里做什么?

提前致谢。

最佳答案

如果没有包含方法,则导出 struct什么都不做——导出 class意味着导出其所有方法及其 typeinfo如果它包含一个vtable

您导出的 WorkerWrapper这样也是有问题的,因为std::unique_ptr<Worker>未导出。如果你没有任何内联方法(包括默认实现),它会起作用,但 MSVC 会给你一个 warning C4251 .

尝试只传递一个接口(interface)指针。虚拟析构函数没问题,因为它们调用适当的释放器。

关于c++ - 如何使用包装类中定义的 __declspec(dllexport) 结构导出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33937913/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com