在构建dll时,我需要在客户端的标头中提供多少个父级作为__declspec(导出)
How many parents I need provide as __declspec(export) in headers for client when building dll?
我为自己写了一个小引擎。我不知道如何从引擎中为客户端代码提供最少数量的头和信息。用户所需要的只是Processor模板类和两个公共方法,以及用户必须覆盖的IProcessor中的方法。问题如下。
#ifdef __ARENGINE_ON_WORK__
#define DLL_SPEC __declspec(dllexport)
#else
#define DLL_SPEC
#endif
template<typename T, typename... masks>
class Processor : public ProcessorBase
{
public:
DLL_SPEC static BitMask Mask()
{
static const BitMask mask = FormMask((masks::Mask())...);
return mask;
}
DLL_SPEC BitMask GetMask() override
{
return Mask();
}
private:
template<typename... masks>
static BitMask FormMask(const masks&... args)
{
BitMask resultMask = 0;
std::vector<BitMask> vec = { args... };
for (auto item : vec) resultMask |= item;
return resultMask;
}
};
class DLL_SPEC ProcessorBase : public EngineStorable, public IProcessor
{
public:
~ProcessorBase();
private:
void NotifyProcessorDeleting();
};
- 需要将处理器类标记为DLL_PEC吗
- 需要将ProcessorBase标记为DLL_PEC吗
- 我需要为客户端代码提供ProcessorBase头文件吗?如果是,我需要提供多少个继承层次的父级
由于处理器代码是内联的,因此没有必要将Processor
类标记为DLL_SPEC-所有代码都将在客户端模块中实例化。唯一将被导入的方法是~ProcessorBase()
,所以只标记此方法。顺便说一句,如果DLL和客户端模块使用不同版本的C运行库,则导出析构函数可能不安全。在这种情况下,在实现中添加导出的方法void destroy()
并调用delete this
。
相关文章:
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 复制列表初始化的隐式转换的等级是多少
- while循环中while循环的时间复杂度是多少
- conan有没有办法导出一个空目录
- 将浮动的heightmap数组导出为16位原始值
- 如何检查一个c++字符串中有多少相同的字符/数字
- C++有多少类型的循环
- 如何创建从Maya(或类似程序)到虚幻引擎的自定义数据导出插件
- 求出有多少个数字是完美平方,而sqrt()是L,R范围内的素数
- 将位字段导出到数组
- 导入/导出变量时出错
- 在条件变量中触发错误信号的频率是多少
- 函数的时间复杂度是多少?
- 是否可以将函数导入命名空间,但不能导出它?
- 必须为 C++20 协程帧保留多少内存?
- 对于四轴飞行器,PID中I控制器的理想值应该是多少
- C++,数组有多少个地址?
- 导出函数中有多少下划线('_')(C++
- dumpbin导出输出中的@number是多少
- 在构建dll时,我需要在客户端的标头中提供多少个父级作为__declspec(导出)