【发布时间】:2022-01-14 03:31:42
【问题描述】:
我目前正在使用 C++ 中的模板类。在这些类中,我使用的类型再次依赖于模板参数。为了不一直输入参数,我做了一些类似的事情
template<typename T>
class A
{
using someName = someClass<T>;
}
实际代码中有更多示例,但这应该能说明这个想法。
这很好用,只要我在 A 类中只需要 someName。但我的项目已经发展壮大,并且我添加了其他应该使用 someName 的模板类。
我的问题是:什么是定义上述(几种)类型的最佳方法,这些类型取决于一些模板参数并在多个其他类中使用它们(最好不用写出所有参数不断)?
到目前为止我的想法:
- 当然,我可以简单地将
using someName = std::someClass<T>;复制到所有使用它的类。但这不是很优雅,添加类和添加此类类型都变得越来越麻烦。 - 另一种方法是将所有
usings 写入文件并让编译器通过include为我进行复制和粘贴。但我不确定这是否真的有效,这似乎是一种非常暴力的方法,通常不是好的做法。 - 我还尝试了涉及
using的不同方法,但到目前为止都没有奏效。不过,在我看来,这可能是解决问题的最有希望的途径。
也许我把事情弄得太复杂了,有一个更简单、更直接的解决方案。
【问题讨论】:
-
貌似没办法,连继承都不行stackoverflow.com/questions/39334150/…
-
???矢量 ???您的示例没有向量。不清楚您的用例是什么。是否有一个参数,可能是向量,用作许多其他模板化事物中的预定义别名?
-
一个 type_traits 类可能对这些 typedef 进行分组,但
std::vector<T>可能比typename myTrait<T>::vector更短/更简单... -
您可以创建模板别名,例如
someContainerClass<T>,它可能变为vector或list,具体取决于T。不确定这是否有帮助。你的问题有点不清楚。 -
@Klaus 抱歉,我将示例更改为更通用但忘记调整文本
标签: c++ templates typedef using