gpt4 book ai didi

c++ - 如何从模板访问模板类的静态?

转载 作者:搜寻专家 更新时间:2023-10-31 00:12:58 25 4
gpt4 key购买 nike

我正在尝试使用 CRTP 模式编写模板。我希望模板能够访问模板化类中的 static const

我的模板在它自己的标题中看起来像这样:

template <class T> foo {
static const int readValue = T::value
}

然后我像这样从模板继承(在另一个头文件中):

class fooImpl: foo<fooImpl> {
static const int value = 42;
}

但是,clang 提示:

“fooImpl”中没有名为“value”的成员

我想我在这里遇到了先有鸡还是先有蛋的问题。模板不知道 fooImpl 的定义,因此在实例化时无法知道它具有成员 value

但是我该如何解决呢?有没有办法让 const 值在编译时传播到实例化模板中?

最佳答案

foo<fooImpl>基类在基类列表中实例化,但 fooImpl在这一点上是一个不完整的类型,foo::value尚未宣布。

您可以稍后移动静态成员的定义:

template <class T> struct foo {
static const int readValue;
};

class fooImpl: foo<fooImpl> {
static const int value = 42;
};

template<class T> const int foo<T>::readValue = T::value;

但是,这不允许您使用 readValue作为 foo 主体中的编译时常量.

关于c++ - 如何从模板访问模板类的静态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28632382/

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