簡體   English   中英

部分專業化模板作為特征成員類型

[英]partially specialized template as a trait member type

我想從特征類中選擇一個模板,如下所示:

template<typename T>
class JobTypeA { };

template<typename T>
class JobTypeB { };

template<typename T>
class JobTraits
{
    /* nothing */
};

class A { };

template<>
class JobTraits<A>
{
    typedef JobTypeA Type;
};

class B {};

template<>
class JobTraits<B>
{
    typedef JobTypeB Type;
};

class JobTarget1 { };
class JobTarget2 { };

template<typename T, typename U>
class JobUser
{
public:
    typedef typename JobTraits<T>::Type<U> JobType;

    void doSomething (void)
    {
        JobType j;
        /*... */
    }
};

int
main (void)
{
    JobUser<B, JobTarget1> j;
}

由於特殊特征類中的“不完整類型的typedef”,因此不會編譯以上內容。 我在帶有g ++ 4.7.2的std = c ++ 11中使用“別名模板”來工作。 但是VS2010還不支持它。 沒有“別名模板”,是否有任何變通辦法可以實現相同的目的。

怎么樣

template<typename U>
struct Type
{
   typedef JobTypeA<U> type;
};

template<typename U>
struct Type
{
   typedef JobTypeB<U> type;
};

用法:

typedef typename JobTraits<T>::template Type<U>::type JobType;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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