相关疑难解决方法(0)

与定义的类相同类型的静态constexpr成员

我希望C类有一个类型为C的静态constexpr成员.这在C++ 11中是否可行?

尝试1:

struct Foo {
    constexpr Foo() {}
    static constexpr Foo f = Foo();
};
constexpr Foo Foo::f;
Run Code Online (Sandbox Code Playgroud)

g ++ 4.7.0说:'无效使用不完整类型'指的是Foo()调用.

尝试2:

struct Foo {
    constexpr Foo() {}
    static constexpr Foo f;
};
constexpr Foo Foo::f = Foo();
Run Code Online (Sandbox Code Playgroud)

现在的问题是在类定义中缺少constexpr成员的初始化器f.

尝试3:

struct Foo {
    constexpr Foo() {}
    static const Foo f;
};
constexpr Foo Foo::f = Foo();
Run Code Online (Sandbox Code Playgroud)

现在g ++抱怨重新声明Foo::f不同的内容constexpr.

c++ constexpr c++11

38
推荐指数
3
解决办法
4770
查看次数

解决与封闭类具有相同类型的“constexpr”静态数据成员的限制

constexpr我想为一个类提供Color如下功能:

// color.hpp
struct Color
{
    Color(int r, int g, int b, int a);
    static const Color Red;
    // ...
};



// color.cpp
Color::Color(int r, int g, int b, int a) { /* ... */ }
const Color Color::Red(255, 0, 0, 255);
// ...
Run Code Online (Sandbox Code Playgroud)

我的愿望是保持此类的 API 不变,因此我想完全删除color.cpp并对头文件进行以下更改:

// color.hpp
struct Color
{
    constexpr Color(int r, int g, int b, int a) { /* ... */ }
    inline static constexpr Color Red{255, 0, 0, 255};
    // …
Run Code Online (Sandbox Code Playgroud)

c++ static initialization constexpr c++17

4
推荐指数
1
解决办法
516
查看次数

标签 统计

c++ ×2

constexpr ×2

c++11 ×1

c++17 ×1

initialization ×1

static ×1