是否可以使模板特化等于另一种类型

Is it possible to make a template specialization to be equal to another type

如果我有例如:

template <class T>
class MyOptional { /*...*/ };

我知道我可以定义一个专业,例如对于 T = bool 将有一个不同的(单独的)实现:

template <> class MyOptional<bool> { /*...*/ };

但是可以说这个T=bool特化等于另一种类型(例如MyOptBool)吗? 像这样:

class MyOptBool { /*...*/ };
using Optional<bool> = MyOptBool;  /* impossible but looking for similar functionality */

我唯一想到的就是使用继承:

class MyOptBool { /*...*/ };
template <> class MyOptional<bool> : public MyOptBool {
  using MyOptBool::MyOptBool;
};

第一个问题:有没有更优雅的方案? (只是出于好奇 + 我有一些转换问题等)。

第二个问题:"workaround"是否使用继承来声明两个类相等常用(在一些重要的库等中)?

一种允许 Optional<T> 以这种方式解决的可能方法,即使它实际上并没有最终专业化 MyOptional,本身:

template<class T>
class MyOptional {};

class MyOptBool {};

template<class T>
struct OptionAlias {

    typedef MyOptional<T> type;
};

template<>
struct OptionAlias<bool> {

    typedef MyOptBool type;
};


template<typename T>
using Optional = typename OptionAlias<T>::type;

void foo()
{
    Optional<int> x;

    Optional<bool> y;
    MyOptBool z=y;
}