template<typename Tag, typename Tag::type M>
struct Rob {
friend typename Tag::type get(Tag) {
return M;
}
};
Johannes Schaub のブログからこのコードを取り上げました。2 番目のテンプレート パラメーターに使用される構文は見たことがありません。どういう"Tag::type M"意味ですか?
コンパイル時の定数である限り、非型のテンプレート パラメーターを使用できます。つまり、次のようなものを持つことができます
template <int M> ...
ここで、非型テンプレート引数の型を別のテンプレート引数のネストされた型に依存させることが合理的かもしれません:
template <typename T, typename T::type M> ...
パーツは、が型であり、指定されたテンプレート引数がこの型であるとtypename T::type述べています。typeより具体的な例は
template <typename T, typename T::size_type S> ...
コンテナ タイプでインスタンス化された場合S、コンテナの の定数になりsize_typeます。
この場合、それはTagtypename が と呼ばれる typename 自体を定義することを意味しTag::typeます。クラス内で型 (または静的変数/関数) を定義すると、クラスは名前空間として機能でき::ます。そのため、名前空間がある場合と同様に、ここで使用します。
あなたの例はと同等です
<typename MyFirstType, typename MyFirstType::type MySecondType>