【问题标题】:Create interface to my C++ static library为我的 C++ 静态库创建接口
【发布时间】: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


【解决方案1】:

感谢 Vaughn Cato 提供的帮助,我使用 PIMPL 策略解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    • 2010-09-25
    相关资源
    最近更新 更多