가변 인자 템플릿 인수로서 포인터를 멤버에 전달할 수 있습니까? 구문을 파악할 수없는 것 같습니다. 이처럼 사용할 수가변성 템플릿 매개 변수로서의 멤버에 대한 포인터
struct A
{
int a;
float b;
}
template <typename ... TArgs> void f(A *obj, TArgs ... params)
{
void *members[] { (&(obj->*params))... };
// ... do something ...
}
가 : 함수에 대한
는 다음과 같이 작동 전화f(obj, &A::a, &A::b);
내가 클래스 템플릿에 비슷한 방식으로 PARAMS를 전달하고자
template <[something] ... params> class Foo
{
void Bar(A *obj)
{
void *members[] { (&(obj->*params))... };
// ... do something ...
}
};
이렇게 사용해야합니다.
Foo<&A::a, &A::b> foo;
foo.bar(obj);
무엇이 있어야하는지 파악하는 데 문제가 있습니다. 회원 유형이 알려진 하나 개의 매개 변수가있는 경우
, 그것은 다음과 같이 수행 할 수 있습니다
template <int A::*ptr> //...
는 회원이 다른 알 수있는 멤버 포인터의 가변 매개 변수 목록이 일반화 할 수있는 방법이 있나요 미리 유형?
업데이트 : 고정 알려진 형식의 멤버 포인터에 대한 가변 인자 인수 팩과 같이 선언한다 :
template<int A::*...ptr> struct Foo {};
지금 난 그냥 추론 할 수있는 유형 이름으로 INT를 교체해야합니다.
그리고 C++ (17)와 완벽하게 작품을 다음
template<auto A::*...ptr> struct Foo {};
는 불행하게도, 난 C++ 14
아마도'template'? –
Zereges
불행히도 컴파일되지 않습니다. – Ghostrider