ValueType
定義したクラス (typedef) から typedef が指す型を取得しようとしています。ただし、これが失敗した場合は、指定された型を返すようにします (たとえば、 a を指定した場合は、 adouble
を返しますdouble
)。これは私がこれまでに持っているものです:
struct myClass { typedef double ValueType; };
template < typename V, typename U = typename V::ValueType>
struct base_type { typedef U type; };
template < typename V >
struct base_type< V, V > { typedef V type; };
static_assert( std::is_same < typename base_type< myClass >::type , double >::value,
"base_type doesn't work" ); //This works.
static_assert( std::is_same < typename base_type< double >::type , double >::value,
"base_type doesn't work" ); //This returns "error: 'double' is not a class, struct, or union type"
ただし、これは機能しません。2 番目の static_assert は失敗します。明らかに、2 番目の定義が呼び出されることはありませんが、その理由はわかりません (最初の定義より確実に一致します)。
何か案は?