gpt4 book ai didi

c++ - 类模板中的别名

转载 作者:行者123 更新时间:2023-12-01 22:49:32 33 4
gpt4 key购买 nike

下课

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

如何在不指定模板参数或使其成为模板别名的情况下访问像 test::unit 这样的单元。请注意,插入一个虚拟模板参数,例如 . int 不是一个选项,因为某些模板类无法用此类类型实例化。

最佳答案

首先,重要的是要了解模板中的所有内容实际上都取决于模板参数 T .即使乍一看似乎并非如此。

考虑可以有一个特化:

template <>
struct foo< bar > {};

现在有一个foo没有成员别名的实例化。这就是为什么 foo::unit 的原因无法按您希望的方式工作。


Please note that inserting a dummy template argument like e.g . int is not an option since some template classes cannot be instantiated with such types.

我不明白这个论点。如果有一个不同的类模板(没有模板类,它们被称为类模板)不能用 int 实例化。然后选择不同的默认值。您不需要对所有使用相同的默认值。

但是,如上所述,使用默认参数然后通过 foo<>::unit 引用别名的方法无论如何都是有缺陷的。


简单的解决方案是不要将别名作为成员:

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

另一方面,如果它应该是类的一部分,它可以移动到非模板基类:

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

关于c++ - 类模板中的别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74652952/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com