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