作为类模板参数之一,我需要使用指向成员的指针:
template <class Base, typename Member, Member Base::*m>
class MemPtrTestUgly
{
...
};
这需要用作
struct S
{
int t;
}
MembPtrTestUgly <S, int, &S::t> m;
但我想用它作为:
MemPtrTestNice<S, &S::t> m;
成员类型是从成员指针推导出来的。我不能使用函数模板,因为MemPtrTest
类不应该被实例化(只有一些静态函数将被使用)。有没有办法在纯C ++ 03(没有Boost或TR1)中做到这一点?
答案 0 :(得分:1)
您可以使用部分特化并获得漂亮的实现:
template <typename TMember, TMember MemberPtr>
class MemPtrTest;
template <typename TBase, typename TType, TType TBase::*MemberPtr>
class MemPtrTest<TType TBase::*, MemberPtr>
{
// ...
};
这将用作:
MemPtrTest<decltype(&S::t), &S::t> m;
当然,如果您不想隐式指定成员类型,则需要decltype
或等效项。