0

私のコードではstatic_cast<int *>、約100万回書き直しましたが、これを呼び出すたびに同じことをするようにキーワードを再定義する方法はありますか?

castと同じことをしますstatic_cast<int *>

4

3 に答える 3

1

static_cast#defineには、C++ プログラマーが自分のステートメントや他のステートメントを探しに行かなくても、それが何であるかを正確に認識できるという利点があります。継続してご利用いただくことを強くお勧めしますstatic_cast

ただし、問題は必要なキーストロークの数であるため、マクロをサポートするテキスト エディターを使用するのが最善の解決策であると思います。このようにして、最終的に保存されるコードは標準のstatic_cast<T>(x)構文を使用しますが、[sc]tabTtabxtab.

その方法に関する情報は、そのようなエディタのドキュメントに記載されています。私は高度にカスタマイズ可能なエディターの大ファンではないので、詳細は私の知識を超えています.

于 2012-09-20T05:42:12.503 に答える
1

危険なことをより簡単に行う方法を求めています…

はい、あなたが求めるものを達成する方法はたくさんあります。

  • C++ テンプレート、

  • マクロ定義、

  • エディタのショートカット

  • カスタム前処理、

  • コードを修正する訓練されたサル。

しかし、達成できるのは、コードをさらに理解しにくいものにすることだけです。

代わりに、なぜ型情報を頻繁に失い、いわば手で元に戻さなければならないのかを理解してみてください。

一般的な解決策は、非常に簡単に言えば、最初から型情報を破棄しないことです。

于 2012-09-20T03:39:43.500 に答える
1

こんな感じですか?

#define SCAST(T,X) static_cast<T>(X); 

ただし、通常、このような定義を使いすぎると、コードがわかりにくくなり、理解しにくくなる可能性があることに注意してください。

さらに重要なことに、マクロは見つけにくいバグを引き起こす可能性があるため、マクロに注意する必要があります。たとえば、次のようになります。

#define SQUARE(X) = X*X;

これを で呼び出すとx++、プリプロセッサがリテラル置換を実行し、最終的には で終わることになります(x++)*(x++);。これは、置換が舞台裏で行われるため、探している答えとはまったく異なり、事態を悪化させることを意味します。原因を見つけるのに苦労するでしょう。

代わりに、テンプレート関数を調べるか、可能であればインラインヘルパー関数を調べることをお勧めします。これは安全であり、私が指摘した問題を回避します。

于 2012-09-20T03:41:22.800 に答える