独自の条件ステートメントを記述したり、現在のステートメントをオーバーロードしたりすることは可能ですか?(速記の場合のように- ?
)
調べてみましたが、何も見つかりません。私が心に留めていること:
do
{
//Run Application
}if(...)//Only If variables are initialised
これが可能である場合、C ++でそれを行うにはどうすればよいですか?
独自の条件ステートメントを記述したり、現在のステートメントをオーバーロードしたりすることは可能ですか?(速記の場合のように- ?
)
調べてみましたが、何も見つかりません。私が心に留めていること:
do
{
//Run Application
}if(...)//Only If variables are initialised
これが可能である場合、C ++でそれを行うにはどうすればよいですか?
do
{
//Run Application
}if(...)//Only If variables are initialised
に翻訳されます
if ( condition )
{
//run application
}
では、なぜそれをしないのですか?
新しい演算子を作成することはできません。また、三項演算子?:
をオーバーロードすることもできません。
プリプロセッサをいじることもできますが、通常のを使用するよりも明確なコードが得られなくなりますif
。
#define RUNIF(condition, statement) \
if ( condition ) \
{ \
statement(); \
}
そしてそれを次のように呼びます:
RUNIF(condition, RunApplication())
しかし、個人的には、これを本番コードで見たくありません。
純粋なC++では、既存の演算子をオーバーロードすることしかできず、新しい演算子を作成することはできません。
とはいえ、プリプロセッサまたはカスタムプリプロセッサ(Qtのように)で遊ぶことを妨げるものは何もありません。
オーバーロード可能な演算子のリストはここにあります。&&
したがって、and ||
(推奨されていませんが)のような条件をオーバーロードすることはできますが、?:
do
//のような他のキーワードはオーバーロードできないので、書くことはできませwhile
んif
do {
...
} if()
コンパイルする方法で(プリプロセッサマクロなし)
しかし、あなたはすることができます:
if(...) {
while(true) {
...
}
}
注:オーバーロードは発生せず、コードを単純に再編成するだけです
あなたが置いた場所であなたif()
は使用することができ、while
そしてまたそこに条件を適用することができました-ちょうど普通のようif
に、例えば:
do
{
Object x = getObject();
}while(x != null && x.getVal() > 12)