other my question 기준.회원 특성이나 이에 대한 포인터가 있습니까?
내가 템플릿 매개 변수로 value_type
및 size
을 사용할 수 있습니다, 다음 코드를
template<typename T, int N>
struct A {
typedef T value_type; // save T to value_type
static const int size = N; // save N to size
};
봐를 생각해 보자.
struct Foo {
int m;
int r;
};
template<int Foo::*Mem>
struct B {
static int Foo::* const mp;
};
template<int Foo::*Mem>
int Foo::* const B<Mem>::mp = Mem; // Save pointer to member
하지만 오류가 발생합니다 :
typedef A<int, 2> A1;
typedef A<A1::value_type, A1::size + 3> A2; // OK, A2 is A<int,5>
는 지금은 멤버 포인터와 동일한 작업을 수행합니다.
typedef B<&Foo::m> B1;
typedef B<B1::mp> B2; // DOES NOT WORK
마지막 줄을 작동시키는 방법은 무엇입니까? 또는 similiary 결과를 얻는 방법?
참고. 그것이 작동하지 않는다는 것을 알고 있습니다. C++ 표준에 대한 링크가 필요하지 않습니다. 해결 방법이 필요합니다.
오류 무엇입니까? 나는 그것이 잘 작동 할 것이라고 확신하며, GCC 4.1.2에서 작동한다. –
VS2008 컴파일러를 사용합니다. –
멤버 클래스 타입에 대한 템플릿 매개 변수에 전달할 수있는 합법적 인 값은'& ClassName :: MemberName'이거나 0입니다 - C++ 03 14.3.2 및 14.3.2를 참조하십시오. 5.3.1. 무엇보다도, 위의 코드에서,'B1 :: mp'는 컴파일 타임 상수 표현이 아닙니다. –