メンバーへのポインターにアクセスできません。どうして?
-
05-07-2019 - |
質問
次のコードを検討してください:
template<class T, class F> struct X {};
template<class T, class F, T F::* m> struct Y {};
struct Foo {
int member;
typedef X<int, Foo> x_type; // works well
typedef Y<int, Foo, &Foo::member> y_type; // ERROR
};
typedef Y<int, Foo, &Foo::member> y_type2; // OK
コンパイラがエラーを生成する理由(VS2008)
新規
解決 2
これはバグ
他のヒント
同じ問題に出くわしました。メンバへのポインタテンプレート引数のサポートは、VC ++ではまだ制限されています(バグレポートを参照) 。
私の場合、テンプレート関数i.s.oを使用して回避できます。テンプレートクラス:
template< typename Class > struct CMemberDumper {
Class& object;
template< typename M > void visit_member( M C::*pm ) {
std::cout << object.*pm;
}
};
所属していません StackOverflow