对于接下来的课程
template<typename T>
class test {
public:
using unit = std::micro;
};
Run Code Online (Sandbox Code Playgroud)
如何访问单元,而test::unit无需指定模板参数或使其成为模板别名。请注意,插入一个虚拟模板参数,例如 . int 不是一个选项,因为某些模板类无法用此类类型实例化。
首先,重要的是要理解模板中的所有内容实际上都取决于模板参数T。即使第一眼看起来并不像。
考虑一下可以有一个专门化:
template <>
struct foo< bar > {};
Run Code Online (Sandbox Code Playgroud)
现在有一个foo没有成员别名的实例化。foo::unit这就是为什么不能按您希望的方式工作的原因。
请注意,插入一个虚拟模板参数,例如 . int 不是一个选项,因为某些模板类无法用此类类型实例化。
我不明白这个论点。如果存在无法实例化的不同类模板(没有模板类,它们称为类模板),int则选择不同的默认值。您无需对所有内容使用相同的默认值。
然而,如上所述,使用默认参数然后引用别名 via 的方法foo<>::unit无论如何都是有缺陷的。
简单的解决方案是不将别名作为成员:
using unit = std::micro;
template<typename T> class test { };
Run Code Online (Sandbox Code Playgroud)
另一方面,如果它应该是类的一部分,则可以将其移动到非模板基类:
struct base { using unit = std::micro; }
template <typename T> struct test : base {};
Run Code Online (Sandbox Code Playgroud)