私は C++ のちょっとした言語拡張について考え、提案のドラフトを書きました ( http://pdfcast.org/pdf/user-defined-type-qualifiers-1 )。
アイデアは、ユーザーが const や volatile などの修飾子を自分で定義して、修飾するコード (つまりメソッド) が同じ修飾子のみを呼び出すようにすることです。
問題は、これが言語規則と衝突するかどうか、または何かを見逃していないかどうかです。
私は C++ のちょっとした言語拡張について考え、提案のドラフトを書きました ( http://pdfcast.org/pdf/user-defined-type-qualifiers-1 )。
アイデアは、ユーザーが const や volatile などの修飾子を自分で定義して、修飾するコード (つまりメソッド) が同じ修飾子のみを呼び出すようにすることです。
問題は、これが言語規則と衝突するかどうか、または何かを見逃していないかどうかです。
StackOverflow の話題にはなりません。しかし、ええ、「ユーザー定義の型修飾子」は素晴らしいアイデアであり、長い歴史があります。それらは一般的に汚染分析に使用されます (つまり、ユーザーが制御し、潜在的に悪意のあるビットが信頼できるビットであるかのように使用されないようにする、表示する前にすべての HTML が適切にエスケープされるようにする、など)。
http : / _コードの非セキュアな部分に漏れることはありません)。
とはいえ、ほとんどのアプリケーションでは、「ユーザー定義のデータ型」で十分です。ほとんどの場合、たとえば に機械的に変換できstd::string [[tainted]] x
ますTainted<std::string> x
。
Tainted<std::string> x;
cin >> x; // unfortunately, this implicit conversion of Tainted<T>& to T&
// is exactly what we want to avoid