簡體   English   中英

從指針到成員的類模板推論

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM