C++ 元编程:从 CRTP c 访问编译时静态类成员

问题描述 投票:0回答:1

如何从 CRTP 类型的类访问静态 constexpr 内联变量?

我不明白为什么

T::X
在 struct
Templated
中不可用?

template <typename T> struct Templated {
    static const int x = T::X;
};

struct Normal : Templated<Normal> {
    static constexpr const inline int X = 0;
};

错误:

“X”不是 Normal 的成员。

c++ c++20 template-meta-programming crtp
1个回答
0
投票

找到了!

MSVC 不编译此问题的解决方案是通过简单地将 T::x 放入函数中来延迟 T::x 的评估:

static constexpr const char* name() noexcept { return T::className; }

希望这对某人有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.