1

コードで頻繁に使用するため、この宣言を短縮する可能性はありますか

たとえば、私はこれを使用Objectして自分のCustomObject使用にキャストします

dynamic_cast/static_cast<TCustomClassName*>(SenderObject)

これを使用して短縮する可能性はまったくありますか、typedef static_cast<TCustomClassName*>またはこのようなものを使用してキャスト演算子を使用できるようにする可能性はありますtypedefか?

4

4 に答える 4

10

いいえ、できませ。キャスト演算子のマクロを定義しないでください。アプリケーション コードの管理者を混乱させ、プログラミング サークルに大混乱を引き起こします。これらの演算子は、ここでキャストが行われていることをプログラマーに伝えるための読みやすい方法を提供するために、まさにそこにあります。日常的に使用されるキャストは、プログラマーの間で混乱を引き起こすため、これらのキーワードはプログラマーを助けるためにあります。ですから、それらに固執し、賢く使用してください。C スタイルのキャストに戻らないでください。これらの演算子の目的は、コードで何が起こるかを理解する方法を提供することです。それらに慣れていない場合は、これを読んでください: static_cast、dynamic_cast、const_cast、および reinterpret_cast を使用する必要があるのはいつですか?

于 2012-09-19T07:01:45.720 に答える
1

マクロの代わりにテンプレート化された関数を使用できます。これにより、型の安全性が失われません。

template<typename InputType, typename ReturnType>
void SCast(InputType Input, ReturnType &Ret)
{
    Ret = static_cast<ReturnType>(Input);
}

template<typename InputType, typename ReturnType>
void DCast(InputType Input, ReturnType &Ret)
{
    Ret = dynamic_cast<ReturnType>(Input);
}

template<typename InputType, typename ReturnType>
void RCast(InputType Input, ReturnType &Ret)
{
    Ret = reinterpret_cast<ReturnType>(Input);
}

次に、次のように使用できます。

TCustomClassName *cls;
SCast(SenderObject, cls); 

.

TCustomClassName *cls;
DCast(SenderObject, cls); 

.

TCustomClassName *cls;
RCast(SenderObject, cls); 
于 2012-09-19T21:50:14.593 に答える
0

IDEのキーボードショートカットを使用します。たとえば、Eclipseでは、コードを完了するだけで、入力するのに数回のキーストロークしかstatic_cast<MyClass*>.必要ありません。同じことが本当に頻繁に必要な場合は、独自のキーボードマクロを定義して、1つのホットキーからボイラープレートを挿入することもできます。

于 2012-09-19T07:10:03.883 に答える