【发布时间】:2011-08-06 17:52:50
【问题描述】:
关于在 C++ 类中有条件地定义成员函数的建议是什么? (问题集中在限制 DLL 中某些类的外部暴露 - 特别是当这些类作为参数传入时)。显然这不是你想对数据成员做的事情,但函数应该没问题,不是吗?
例如:
class A
{
public:
void func1();
#ifdef _CONDITION_
void func2(B b);
#endif
};
已编辑: 添加公共修饰符以避免示例混淆。
【问题讨论】:
-
你能详细说明你为什么要这样做吗? #indef(预处理器)是编译前的东西,所以你不能用它来使成员函数出现在某些调用中而不是其他调用中。
-
当使用 C++ 中的共享库 (DLL) 时,您通常仍包含在库中编译的类的头文件。在这种情况下,我不希望使用 DLL 的软件看到这些头文件中引用的某些类。
-
oic;您正在创建不同风格的头文件,一种用于内部使用,另一种用于外部接口?听起来你的技术会很好。如果这与您的需求相似,我已经看到 #if 控制是否发出 __declspec(dllexport) 之类的东西的情况。
-
@seand 这样好吗?如果 dll 和程序看到类的不同定义,它们会构建不同的内部表示,并且类型虽然具有相同的名称,但不再匹配。如果是这样的话,听起来对我来说是一个糟糕的解决方案。
-
@ivella 你是对的!内部结构(vtables 等)将不正常。如果这是@Nicolas-s 最初的目标,也许最好只 dllexport 打算在外部可见的函数。
标签: c++ function dll conditional member