gpt4 book ai didi

c++ - 如何访问模板参数自己的模板参数?

转载 作者:行者123 更新时间:2023-12-02 10:06:42 24 4
gpt4 key购买 nike

假设您有一个类(class)模板(例如下面的second)。假设类模板的模板参数是另一个类模板的实例(例如下面的first)。您如何访问模板参数自己的模板参数?那可能吗?

这是一些代码:

template<size_t n>
class first {
};

template<typename instantiated_first>
class second {
// would like to be able to access the "n"
// of instantiated_first
};

int main() {
second<first<3>> thing;

return 0;
}

我想到了三种可能性:
  • 重写first以将n存储为数据成员,或
  • 重新设计second以从first
  • 的实例化类继承
  • 在两个类模板中要求完全相同的模板参数。

  • 我问是因为我不想编辑预先存在的代码(选项1),并且在我的特定应用程序中,至少将 second视为 first的一种类型(选项2)真的没有意义(至少对我而言) )。我将实例化许多类型为 specialized_first的对象,因此 second“拥有”这些对象并将它们存储在容器中更有意义。选项3看起来也不是很时尚。

    有什么我不知道的精美模板功能可以很好地完成此任务吗?

    最佳答案

    更明智的方法不是将n存储为数据成员,而是存储为static constexpr size_t,因此它不会分配任何其他运行时空间。这是标准且最灵活的机制-允许其他各种模板访问此参数而不会引起麻烦。例如,您可以制作完全不同的first版本,并允许second在支持原始版本的同时始终使用其他版本,只要所有版本都满足概念界面即可。

    同样,每个typename T_模板参数都可以通过using T = T_;转发给模板的用户。通常,除非您通过声明模板参数为类型或将其值存储为constexpr或其他方式允许模板参数进入,否则无法访问模板参数。

    您可以重新建模second,使其接受相同的模板参数,但是使用first和该值/类型的其他模板越多,或者您突然想将second用作first的替代版本时,它就越难。从根本上更好地解决此类问题。例如,在std中,它们的所有模板类都以类似的方式在类内部声明了所有必需的类型。

    关于c++ - 如何访问模板参数自己的模板参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59901584/

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