gpt4 book ai didi

c++ - 重用基类中的模板变量

转载 作者:行者123 更新时间:2023-12-01 21:58:51 24 4
gpt4 key购买 nike

让我们考虑这样的类层次结构

template<typename T>
struct Base
{
template<typename...U>
constexpr static bool SOME_TRAIT = std::is_constructible_v<T,U...>;
};

template<typename T>
struct Derived : Base<T>
{
//some usage of SOME_TRAIT
};

要在 Dervied 中使用它,我必须使用以下内容:

template<typename...U>
constexpr static bool SOME_TRAIT = Base<T>::template SOME_TRAIT<U...>;

这可能会很吵。是否有类似于成员函数的 using 声明,但可用于 SOME_TRAIT

最佳答案

不。或者更确切地说,您已经找到了最好的方法。

问题是,解析器需要具有 SOME_TRAIT 的形状向其解释。 using SOME_TRAIT不会给它任何关于 < 是否存在的更多信息和>SOME_TRAIT<foo>应被解释为运算符或分隔符。语言标准要求在 Derived 的定义点完成此操作。 ,而不是等到Derived实际上是专门化和使用的,所以它不能假设 SOME_TRAIT将始终是一个变量模板(因为 Base 稍后可能会被给予专门化)。除了bool之外,您在那里提供的内容和命名U ,是解析器完成其工作所需的最小信息量。

关于c++ - 重用基类中的模板变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59302355/

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