c++ 类模板中的别名

bvuwiixz  于 2022-12-05  发布在  其他
关注(0)|答案(1)|浏览(107)

对于以下类

template<typename T>
class test { 
   public:
   using unit = std::micro;    
};

我如何访问像test::unit这样的单元而不需要指定模板参数或使其成为模板别名。请注意,插入一个伪模板参数(例如int)不是一个选项,因为一些模板类不能用这样的类型示例化。

3htmauhk

3htmauhk1#

首先,重要的是要理解模板中的所有内容都依赖于模板参数T,即使乍一看并不像。
考虑一下可以有一个专门化:

template <>
struct foo< bar > {};

现在有一个没有成员别名的foo示例化,这就是为什么foo::unit不能按您希望的方式工作的原因。
请注意,插入伪模板参数(例如int)不是一个选项,因为某些模板类不能用这样的类型示例化。
我不明白这个论点。如果有一个不同的类模板(没有模板类,它们被称为类模板)不能用int示例化,那么选择一个不同的默认值。你不需要对所有的类使用相同的默认值。
然而,如上所述,使用默认参数然后通过foo<>::unit引用别名的方法无论如何都是有缺陷的。
简单的解决方案是不将别名作为成员:

using unit = std::micro;    
template<typename T> class test { };

另一方面,如果它应该是类别的一部分,则可以将它移至非样板基底类别:

struct base { using unit = std::micro; }
template <typename T> struct test : base {};

相关问题