gpt4 book ai didi

c++ - 如何在 Visual Studio 中的静态库中隐藏类

转载 作者:太空宇宙 更新时间:2023-11-04 02:01:42 31 4
gpt4 key购买 nike

我只想有 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 ,则辅助类将可见并且链接将成功。

关于c++ - 如何在 Visual Studio 中的静态库中隐藏类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26568417/

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