C ++ 0Xを検出しようとするオプションの組み込みコードを含むコードがいくつかあります。それが機能するふりをしましょう(この質問の範囲外であるプラットフォームをどのように悪く、どのようにクロスしないかについて議論します)。#defineがあるとしましょうDETECTCXX0X
。C ++ 0Xの場合。
これを行うのは、どれほどひどい考えですか。
#ifndef DETECTCXX0X
#define override
#endif
そして、あなたは何か選択肢がありますか?
(正しいことは、明示的なオーバーライドを使用しないことだと思います)。
Igor Tandetnikが指摘しているように、C ++ 11およびC ++ 98では次のように言うことは合法です。
int override = 10;
override
C ++ 11でも実際にはキーワードではないからです。あなたのコードがこれをするなら、あなたのマクロはそれをC ++ 98モードで壊します。このような識別子の使用を禁止すると、メソッドは正常に機能します。唯一の問題は、そのルールを忘れて、エラーメッセージを理解するのが難しくなる可能性があることです。カスタマイズ可能なある種のリンターを使用している場合は、この問題を排除するルールを追加できます。
別のオプションは、プレトリアンのソリューションです。
#ifndef DETECTCXX0X
#define OVERRIDE
#else
#define OVERRIDE override
#endif
ただし、これにより、IMOというコードが醜く読みにくくなります。
あなたが以下をする贅沢を持っているなら、これは私がお勧めするものです:
#ifndef DETECTCXX0X
#error C++11 support required
#endif
C ++ 11以外のコンパイラを回避できない場合、そのリンターがある場合、2番目に良いオプションはそれを#define override
。と一緒に使用することです。3番目に良いのは、この特定のC ++ 11機能をまったく使用しないことです。私の見解では、最も望ましくないオプションは#define OVERRIDE override
です。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加