【发布时间】:2012-12-16 06:12:40
【问题描述】:
假设我的项目中有 2 个文件:“code.h”和“readData.cpp”。 code.h 文件有我的类接口(和一些成员函数定义),而 readData.cpp 文件有我的类的私有成员函数之一的定义。
假设这是我的 code.h 文件的内容:
Class MyClass {
public:
MyClass() { readData() };
double sample();
private:
std::vector<double> data;
void readData();
void foo();
};
double MyClass::sample() {
// ...
}
void MyClass::foo() {
// ...
}
假设这是我的 readData.cpp 文件的内容:
#include "code.h"
void MyClass::readData() {
data.push_back(1.3083);
data.push_back(83.24);
// ...
}
现在,在编译和生成目标文件“readData.o”之后,我使用代码创建了一个库:
ar rvs myLib.a readData.o
好的,到目前为止一切顺利。但这就是我的问题所在。我想分发这个 myLib.a 库并仅允许其他用户看到类似以下界面的内容:
Class MyClass {
double sample();
};
我该怎么做?
【问题讨论】:
-
pimpl 成语是一种方式。
-
@VaughnCato 好的,感谢您的建议。假设我不关心隐藏界面,而只想隐藏文件readData.cpp的内容。那么,我该怎么办?我是否只是将 myLib.a 文件与文件 code.h 一起分发? (我以前从未创建过库)
-
没错。任何非内联或模板化的函数定义都可以进入 cpp 文件。 cpp 文件被编译成 .o 文件,.o 文件被一起收集成 .a。最终的可执行文件是通过链接到 .a.
标签: c++ class interface static-libraries header-files