如何无需指定模板实参或模板别名访问类模板中的unit别名?
解决方法
你的test模板里的unit别名根本不依赖模板参数T,所以最靠谱的办法是把它从模板里挪出来,放到一个普通的结构或者命名空间里:
// 把unit单独放到非模板的结构里 struct test_unit { using type = std::micro; }; template<typename T> class test { public: // 模板内部照样保留unit别名,不影响原有代码使用 using unit = test_unit::type; }; // 现在直接用 test_unit::type 就能访问到你要的类型了
要是你非得保留test::unit这种写法,而且不能用虚拟实参实例化模板,那在C++标准里其实没有直接的语法支持——因为模板的内部成员必须得实例化模板之后才能访问。但如果你的模板能用那种没特殊要求的空类型(比如std::monostate),可以试试这么写:
#include <variant> // std::monostate是空类型,绝大多数模板都能实例化它 using unit_type = test<std::monostate>::unit;
但你明确说明虚拟实参不可行,那还是第一种把unit挪到模板外部的方案最稳妥。
内容的提问来源于stack exchange,提问作者ATK
相关产品推荐
相关产品推荐

