1

私は現在、汎用の C++ ライブラリに取り組んでいます。私は実際の関数名を使用するのが好きで、実際に私のプロジェクトには一貫した関数命名システムがあります。関数 (またはメソッド) がbool を返さない場合、動詞
で始まります (この場合は is_ で始まります) 。この関数を考えてみましょう:

#include "something.h"
int calculate_geometric_mean(int* values)
{
//insert code here
}

そのような関数は形式的に見えると思うので、関数にそのように名前を付けます。ただし、ユーザーが関数名を切り替えるための単純なマクロ システムを設計しました。

#define SHORT_NAMES
#include "something.h"
#ifdef SHORT_NAMES
int calc_geometric_mean(int* values)
#else
int calculate_geometric_mean(int* values)
#endif
{
//some code
}

これはエイリアスを使用するよりも賢明ですか (関数の各エイリアスがメモリに割り当てられるため)、またはこのソリューションは純粋な悪ですか?

4

3 に答える 3

4

FWIW、この二重命名システムに多くの価値があるとは思えません。ただし、(控えめに言っても) 多くの混乱を引き起こす可能性があります。

いずれにせよ、それが素晴らしいアイデアであると確信している場合は、マクロではなくインライン関数を使用して実装します。

// something.h

int calculate_geometric_mean(int* values); // defined in the .cpp file

inline int calc_geo_mean(int* values) {
   return calculate_geometric_mean(values);
}
于 2013-01-30T22:07:43.910 に答える
2

オブジェクト ファイル/ライブラリにエクスポートされるシンボルは何ですか? 他のバージョンを使用しようとするとどうなりますか? 独自のシンボルを持つ 2 つのバイナリを配布しますか?

だから - いいえ、悪い考えです。

于 2013-01-30T22:07:33.343 に答える
0

通常、命名システムの背後にある目的は、コードを読みやすく理解しやすくすることです。

これで、実質的に 2 つのシステムができ、それぞれに理論的根拠があります。あなたはすでに、読みやすさの最終目標を希薄にする命名への 2 つのアプローチを念頭に置いておくことをリーダー/メンテナーに強制しています。コードベースを汚染する醜い #define は気にしないでください。

一貫性が重要なので、1 つのシステムを選択してそれに固執することをお勧めします。この解決策自体が純粋な悪であるとは言いません。そもそもこれは解決策ではないと思います。

于 2013-01-30T22:24:18.767 に答える