我想知道是否可以使用 SFINAE 在不同的类中设置别名模板,具体取决于特征类中是否存在别名。
template<class T>
struct Foo_Traits;
struct Foo1;
template<>
struct Foo_Traits<Foo1>
{
using type1 = Bar1;
using type2 = Bar2;
};
struct Foo2;
template<>
struct Foo_Traits <Foo2>
{
using type1 = Bar3;
};
本质上,我们有 2 个类 Foo1 和 Foo2 以及它们的特征类,在这种情况下定义类型别名以简化它。在所有情况下,我们将拥有 type1 别名,在某些情况下,我们将拥有 type2。
在另一个类中(在我的情况下,它实际上是 Foo 的基类)我想为这些类型设置别名。
template<typename ImplT>
class FooBase
{
using T1 = typename Foo_Traits<ImplT>::type1;
using T2 = typename std::conditional< defined<typename Foo_Traits<ImplT>::type1>::value ,
typename Foo_Traits<ImplT>::type2,
T1>::type;
};
我怎样才能真正实现用伪代码编写的那种东西
using T2 = etc...