템플릿 매개 변수로 템플릿 멤버 함수를 사용하려고합니다. 호출에템플릿 매개 변수로 템플릿 멤버 함수 포인터
Invoke<&A::Foo>(5, true);
그리고이 유사 할 수 있습니다 : 내가 좋아하는 것
class A
{
public:
template<typename... Args>
void Foo(Args...) {}
void Bar() {}
};
호출 할 수 있도록 :
A a;
a.Foo(5, true);
I이 클래스 주어진 예를 들어
, 이 작업을 수행하는 방법을 알고 Bar()
:
template<void (A::*F)()>
void Invoke()
{
A a;
(a.*F)();
}
int main()
{
Invoke<&A::Bar>();
}
이 템플릿을 템플릿 함수 포인터로 확장 할 수 있습니까? 또는 이와 유사하게 모든 매개 변수 유형을 가진 함수를 처리 할 수있는 이와 같은 전달 함수를 작성하십시오. 이것은 작동하지만 뭔가 비슷한을하지 않습니다이 가능하지 않을 이유
template<typename... Args, void (A::*F)(Args...)>
void Invoke(Args... args)
{
A a;
(a.*F)(args...);
}
내가 볼 수 있지만, 사실이라면 그 이유에 대한 표준을 가리 수 있을까? 나는 또한 표준의 특성에 대해 더 많은 것을 배우려고 노력하고있다.
시도'호출 <& A :: 푸> (5 사실)': 다음, 당신은 실제 함수를 호출하는 호출 객체를 정의해야합니다. 그게 작동한다면, type-deducing wrapper * function * 템플릿을 작성하십시오. –
@KerrekSB하지만 멤버 함수 포인터 유형을 지정할 때 매개 변수를 지정해야하기 때문에 Invoke가이 시그니처가있는 함수를 받아 들여야한다고 (함수를 코딩하지 않고) 함수 유형을 지정하는 방법을 모르겠습니다. – JaredC
글쎄, 당신은'Invoke'를보다 강력한 템플릿으로 만들 수 있습니다 ... –