gpt4 book ai didi

c++静态多态性(CRTP)在评估 `static constexpr`时导致类型不完整

转载 作者:行者123 更新时间:2023-11-30 03:17:44 27 4
gpt4 key购买 nike

我需要访问 static constexpr我放在一起的一个解决方案适用于 gcc ( live example ) 但不适用于 vc++ ( live example )。

代码如下:

template<class Drvd>
class Base
{
public:
static constexpr bool val = Drvd::val;
};

class Derived : public Base<Derived>
{
friend class Base;
private:
static constexpr bool val = true;
};

int main()
{
std::cout << Derived::Base::val << std::endl;
}

所以这是 vc++ 的一个错误,但任何人都知道如何实现 valBase 中定义作为 val 的值在Drvd以 vc++ 不会提示的不同方式?

编辑:请注意,结果与变体相同:friend class Base<Derived>;而不是 friend class Base;

最佳答案

你可以使用一种方法:

#include <iostream>

template<class Drvd>
class Base
{
public:
static constexpr bool val() { return Drvd::val; }
};

class Derived : public Base<Derived>
{
friend class Base<Derived>;
private:
static constexpr bool val = true;
};

int main()
{
std::cout << Derived::Base::val() << std::endl;
}

实例:https://rextester.com/IHR24393

关于c++静态多态性(CRTP)在评估 `static constexpr`时导致类型不完整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55242176/

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