開発とテストに非常に役立ちますが、パフォーマンス上の理由から生産性コードの一部であるべきではありません。私たちの目標は、コンパイラにDEV_ONLY
とマークされた関数が同じタグを持つ関数によってのみ呼び出されることを保証することです。 DEV_ONLYは、マクロまたは何か他のものであることを他の開発者関数によってのみ呼び出すことができるC++開発者関数
virtual int foo() DEV_ONLY;
int bar() {
foo(); // fails
}
int blah() DEV_ONLY {
foo(); // works
}
:
どのように私はのようなものを実装するのでしょうか?
次のアイデア
は、これまでに提案されてきたが、私は探していますされていない完全にどのような揮発性:私が見つけた1つのオプションは、(see Dr. Dobbs)「揮発性」としてそれらをマークすることでしたが、私は持っていますその2つの問題。まず、異なるセマンティクスを持つ指定子を誤用し、将来的に問題を引き起こす可能性があります。第2に、関数が「揮発性」であることに関するコンパイラの警告はそれほど有用ではないでしょう。
friend:私の理解では、このような方法を実装しているクラスでは友だちを宣言する必要があります。この方法を使用するテストや開発ツールはあらかじめわかっていないので、私は友人の解決策の友人ではありません。
エクスポートしない:メソッドを使用する場合と使用しない場合があるコードは、同じクラス内であっても可能です。
リリースビルドでnoopに置き換えてください。テストでは、まだリリースモードでこれらのメソッドが必要な場合があります。
何についてではない:それはあなたのような何かを与えるだろうそれらをエクスポートしますか? – Ceros
これに 'friend'shipを使うことができるかもしれません。 – Bathsheba
'#ifdef DEV_ONLY'?または専用ライブラリを作成する:DevOnlyLib? – Jarod42