相关疑难解决方法(0)

如果类成员typedef不存在,则使用默认类型的模板特化

我正在尝试编写使用模板参数的成员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)

c++ templates

15
推荐指数
2
解决办法
5375
查看次数

标签 统计

c++ ×1

templates ×1