問題タブ [header-only]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
354 参照

c++ - ヘッダーのみのライブラリで実装を非表示にする

実装名前空間を使用しようとしましたが、「名前空間を使用」すると、実装名前空間全体が取り込まれ、役に立たなくなります。

実装から何かを使用する前に「implementation::」を使用する必要なく、実装を非表示にする方法はありますか?

0 投票する
1 に答える
1483 参照

c++ - ヘッダーのみのクラスの間違った結果を報告する gcov

以前にも似たような質問がたくさんありました:

ほんの数例を挙げると。しかし、それらのどれも私自身の問題を解決するのに役立ちませんでした。

ソースコードをgcc バージョン 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3)でコンパイルしています。

次に、ソースファイルの 1 つでgcov (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4を実行します。

このファイルには、ヘッダーのみのクラスの単体テストが含まれています。gcov は、このヘッダー ファイルのカバレッジ情報を正常に生成します。

ただし、myclass.h.gcovの結果は間違っています。ほとんどの行について、gcov は、実行可能コードが含まれていないと報告しています。実行可能として検出されたものについては、ほとんどの場合、実行されていないことが報告されます。しかし、それらが実行されていることは確かです (デバッグ中に確認しました。一部の単体テストはバグにより失敗するなど)。テンプレートは関係ありません。したがって、何らかの理由で gcov が正しい実行を検出できないと推測します。上記のコマンドライン引数からわかるように、最適化がオフになっており、インライン化がオフになっています...

他に何がこれらの問題を引き起こす可能性がありますか?

0 投票する
0 に答える
1112 参照

c++ - C++ での単一ファイル/ヘッダーのみのライブラリの構造化

条件付きでヘッダーまたは実装のいずれかになるように、C++ で単一ファイル/ヘッダーのみのライブラリを構築することは良い習慣と見なされますか? 例えば、

したがって、ライブラリのユーザーは、複数の定義を避けるために、単一の実装ファイル内の1 つ#define LIBRARY_IMPLEMENTATIONの前にします。 #include "Library.hpp"

C ライブラリで使用されているこの戦略を見たことがあります ( STBが思い浮かびます) が、これが現代の C++ で慣用的と見なされるかどうか (または、単一ファイル/ヘッダーのみのライブラリを作成するためのより良い戦略があるかどうか) を考えていました。

0 投票する
1 に答える
7371 参照

c++ - ダブル インクルージョンとヘッダーのみのライブラリ stbi_image

ah を含む main.cpp があります (独自の a.cpp があります) ah には、ヘッダーのみのライブラリ "stbi_image.h" が含まれています。

( https://github.com/nothings/stb )

*.cpp には、#pragma once を使用して独自の *.h が含まれます

しかし、私はまだ得る:

LNK1169 1 つまたは複数の複数定義されたシンボルが見つかりました

私には正しいように思えますが、この質問で理解しているように、 複数の定義とヘッダーのみのライブラリ

たぶん、必要な stb_image.h 関数に inline/static を追加する必要がありますか? 私は何か間違ったことをしていますか?

前もって感謝します

0 投票する
0 に答える
1196 参照

c++ - Boost シリアライゼーションをヘッダーのみのライブラリとして使用することは可能ですか?

以下は、優れたBoost.Serializationライブラリを使用する最小限の例です。

ライブラリをコンパイルするには、boost_serializationプリコンパイル済みライブラリとリンクする必要があります。

ライブラリはかなりテンプレート化されており、内部は複雑ですが、実際のコード (関数本体) は非常に単純です。リンクが必要な参照はわずかです。つまり、次のとおりです。

ライブラリをヘッダーのみのライブラリとしてリンクせずに使用できる可能性はありますか?

たとえば、文書化されていないトリックやハック?

これにより、一部のスーパーコンピューター クラスターや、Boost のコンパイルがそれほど単純ではない環境での使用がより簡単になります。


編集: Boost.Asio のように、ライブラリがヘッダーのみのオプションを提供した場合、私は非常にクールです ( https://stackoverflow.com/a/40729439/225186 .)


EDIT2 : Boost.Serializationの作成者とメンテナーは、ヘッダーのみにするという考えを拒否しました。https://github.com/boostorg/serialization/issues/71