実際にはクラスメンバーへのポインタである非型テンプレートパラメータを持つことは可能ですか?私が探しているのは次のようなものです。
struct Person {
Dog dog;
};
template <?? ptr>
struct Strange {
// ...
};
typedef Strange<&Person::dog> weird;
これまでの私の仕事は、そのようなことは何も不可能であると私に信じさせますが、誰かが他のことを言うことができるかどうか私は興味があります。
標準から:
非型テンプレートパラメータは、次の(オプションでcv修飾された)型のいずれかを持つ必要があります。
- 整数型または列挙型、
- オブジェクトへのポインタまたは関数へのポインタ、
- オブジェクトへの参照または関数への参照、
- メンバーへのポインタ
したがって、これは許可されており、次のようにg++
で機能するようです。
template <Dog Person::*ptr>
struct Strange { ... };