我只想有 2 个 extern C 函数,它们是如何与 API 交互的。然后在静态 .lib 中,我想让我的类完成所有工作。但它不应该对外可见。
我可以通过在编译单元内将它们声明为静态来仅使用纯 C 函数来做到这一点,但是我如何使用类来做到这一点?
如果我很好地理解你的问题:
- 你想创建一个只向外界展示两个函数的静态库
- 但是这个库的内部结构应该基于一个你想对外界隐藏的类。
- 您知道如何在经典 C 中隐藏内部结构(即使用辅助静态函数和静态变量),但您不知道如何处理类
如果是这种情况,技巧就是使用未命名的命名空间:
在你的库源代码中,你会有这样的东西:
namespace { // anonymous
class U { // class visible only to the library
public:
int y;
U() :y(0) { cout << "U\n"; }
void mrun() { y++; }
};
}
void f() {
U x;
...
}
然后您可以从外部世界使用您的库:
extern void f(); // declare the function (in a header)
f(); // invoke the function
即使辅助类会在外界声明:
class U { public: int y; U(); void mrun(); };
如果试图使用 U 将无法使用,并且会产生链接错误。这是因为未命名的命名空间对于每个编译单元都是唯一的。
如果您使用相同类型的解决方案但没有匿名 namespace ,则辅助类将可见并且链接将成功。
我是一名优秀的程序员,十分优秀!