템플릿 인수는 멤버 함수에 대한 포인터가 될 수있는 것으로 알려져 있습니다. 멤버 함수 포인터에 대한 템플릿 인수 차감
그래서 내가 쓸 수 있습니다 :struct Bar
{
int fun(float x);
};
template <int (Bar::*FUN)(float)>
struct Foo
{ /*...*/ };
typedef Foo<&Bar::fun> FooBar;
그러나 무엇을 나는이 (가) Bar
유형 자체가 템플릿 인수가 되길 원한다면 : 이제
template <typename B, int (B::*FUN)(float)>
struct Foo
{ /*...*/ };
typedef Foo<Bar, &Bar::fun> FooBar;
, 내가 그것을 사용할 때, 나는 쓸 필요가 Bar
두 번!
제 질문은 컴파일러가 자동으로 클래스 유형을 추론하도록 할 수 있습니까?
목적은 작업이입니다 :
typedef Foo<&Bar::fun> FooBar;
typedef Foo<&Moo::fun> FooMoo;
사실,이 템플릿은 라이브러리 내부의 템플릿이기 때문에 오용의 위험이 없습니다. 어쨌든'member_ptr_traits'는 실제로'T' 타입이 필요하기 때문에 훌륭합니다. – rodrigo