2013-03-20 60 views
0

我想選擇從特質類的模板,如以下:部分專用模板爲特徵的成員類型

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; 
} 

以上不會編譯因爲「類型定義不完全類型的」在專門的特質類。我使用g ++ 4.7.2在std = C++ 11中使用了'別名模板'。但是VS2010目前還不支持。有沒有任何解決方法來實現沒有'別名模板'相同。

回答

1

如何

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; 
+0

工程。謝謝 :) – 2013-03-20 12:55:34