[英]class template deduction from pointer to member
作為類模板參數之一,我需要使用一個指向成員的指針:
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)?
您可以使用部分專業化,並獲得一個漂亮的實現:
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
或等效項。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.