我正在尝试编写使用模板参数的成员typedef的代码,但是如果模板参数没有该typedef,则希望提供默认类型.我尝试过的一个简单示例是:
struct DefaultType { DefaultType() { printf("Default "); } };
struct NonDefaultType { NonDefaultType() { printf("NonDefault "); } };
struct A {};
struct B { typedef NonDefaultType Type; };
template<typename T, typename Enable = void> struct Get_Type {
typedef DefaultType Type;
};
template<typename T> struct Get_Type< T, typename T::Type > {
typedef typename T::Type Type;
};
int main()
{
Get_Type<A>::Type test1;
Get_Type<B>::Type test2;
}
Run Code Online (Sandbox Code Playgroud)
我希望这会打印"Default NonDefault",而是打印"Default Default".我的期望是main()中的第二行应该与Get_Type的专用版本匹配,因为B :: Type存在.但是,这不会发生.
任何人都可以解释这里发生了什么,如何解决它,或另一种方法来实现相同的目标?
谢谢.
编辑:
格奥尔格提供了另一种方法,但我仍然很好奇为什么这不起作用.根据boost enable_if文档,为不同类型专门化模板的方法如下:
template <class T, class Enable = …Run Code Online (Sandbox Code Playgroud)