なぜそれらはconstではありませんか?Gdiplus :: Image :: GetWidth()と他のゲッターの束を "const"にしてはいけませんか?
私はそれが欠陥のあるAPI設計だと思います。または私は何かを逃している?
UINT GetWidth();
UINT GetHeight();
...
対
UINT GetWidth() const;
UINT GetHeight() const;
...
なぜそれらはconstではありませんか?Gdiplus :: Image :: GetWidth()と他のゲッターの束を "const"にしてはいけませんか?
私はそれが欠陥のあるAPI設計だと思います。または私は何かを逃している?
UINT GetWidth();
UINT GetHeight();
...
対
UINT GetWidth() const;
UINT GetHeight() const;
...
言うのは難しいです。私は同意するだろうが、実装にはconst
であることを防ぐ何かがあり、隠すためにオーバーヘッドを追加したくないと思うかもしれない。今はmutable
というキーワードがありますが、このAPIより若いと思います。
APIのデザイナーは、const
というキーワードに敵対しているC++開発者の(時には驚くほど大きく、imoの)束に属していて、使いにくいと感じているかもしれません。私はWindowsの歴史家ではないので、私はあなたに話すことができません。 :)
欠陥のあるAPIデザイン? CスタイルのC++ヘッダ?私たちを持って来たチームからCString?いいえ、できません...
真実ではありませんが、GoTW-C++スタイルのハンドルの周りの基本的なラッパー以上のレベルC++の使用。 Herb Sutterは、Microsoftのライブラリ設計を改善するのではなく、.NET:C++で忙しく働いています。 WTLは、マイクロソフトがmodern C++に来ているのと同じくらい近くにあり、それはむしろあいまいな存在になっています。
厳密に言えば、おそらく正しいでしょう。変数はconstでなければなりません。
私はあなたがGdiplus C++ネイティブAPIについて話していると仮定しています。このコードとGdiplusクラスの実装を調べると、ほとんどのコードがGdiplus Flat API関数(http://msdn.microsoft.com/en-us/library/ms533969(VS.85).aspx)の基本ラッパーであることがわかります。これにより、コードをconst-correctにするのが難しくなるかもしれません。あるいは、(別のことを示唆しているように)Microsoftが典型的にはC++ではありません。
EDIT:Gdiplus :: Image :: GetWidth()(GdiPlusBitmap.h内)のコードを見ると、MSはconst修飾子を使用して多くの関数を実装するのは簡単でした。彼らはImage :: GetType()でそれをやったことがあり、内部のコードはImage :: GetWidth()、Image :: GetHeight()とほとんど同じです。
Re:EDIT 正確に。私はGDI +のソースコードを読んでいる間、一定のWTFを持っていました –
まあ、いくつかはconst修飾子を持っています:Image :: GetType()const –