我想从特征类中选择一个模板,如下所示:
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”,上述内容无法编译。我在 std=c++11 和 g++ 4.7.2 中使用“别名模板”来完成这项工作。但是 VS2010 还不支持它。是否有任何解决方法可以在没有“别名模板”的情况下实现相同的效果。