3

私が作成したライブラリのメイン クラス ヘッダーにサード パーティのファイルが含まれていることを、それをリンクする実行可能ファイルから隠そうとしています。つまり、次のとおりです。

クラス A を定義するライブラリを作成しました。クラス A はクラス B (サード パーティのライブラリで定義されています) から継承します。例:

// In A.h
#include “B.h”
class A : public B
{
    A* something(A* val);
}

// In A.cpp
A* A::something(A*val)
{
    // Do something
    return val;
}

クラス B のヘッダー ファイルは、私のライブラリにとって理想的な環境にいくつかの変更を加えますが、私のライブラリをリンクする実行可能ファイルには有害です。誰かが私に潜在的な解決策として不透明なポインターを指摘しましたが、それらを使用して「B」を非表示にする方法がわかりません。

Bh が含まれていることを隠す方法を知っている人はいますか? 解決策として、C++11 は問題ありませんが、追加の依存関係 (boost など) へのリンクはオプションではありません。

4

2 に答える 2

3

C++ の世界で「実装」を隠す通常の方法の 1 つは、Pimpl/Handle-body/bridge イディオムを使用することです。

クラス A を API のユーザーに公開する代わりに、必要なものだけを公開するハンドル クラスを用意します。

イン・アー

class AImpl;  // forward declaration

class A {
private:
  AImpl* impl;

public:
  foo();
  bar();
}

次に、実際の実装を別のファイルに入れます。

AImpl.h

#include <B.h>

class AImpl: public B {
private:
public:
  foo();
  bar();
  somethingThatYouDontWantToExpose();
}
于 2013-12-16T06:32:19.477 に答える