RSS jeremykun | 数学 ∩ プログラミング

C++ メタプログラミングでフィールド名を検出する

簡単なメモ:C++11のテンプレートを使って、名前と型によって構造体フィールドを検出し、静的に分岐させることができる。私はこの解決策をbreeze1990で初めて知りました。 ある構造体のフィールド・サイズがint型かどうかを検出したいとします。同じ名前の2つのテンプレートのインスタンスを作成し、ここではデフォルトがfalseのHasStaticSizeを作成します。 #template struct HasStaticSize : std::false_type {}; template struct HasStaticSize< T, typename std::enable_if< std::is_same>::value, void>::type> : std::true_type {}; 後者は、T::sizeがintとして宣言されている場合、より具体的にはintに「減衰」するものである場合にのみ解決されます。
favicon
jeremykun.com
Detecting field names with C++ metaprogramming
Create attached notes ...