gpt4 book ai didi

c++ - 初始化类的静态常量成员,其中成员是私有(private)类型?

转载 作者:行者123 更新时间:2023-11-30 05:15:12 25 4
gpt4 key购买 nike

// gamewindow.hpp

#include <SFML/Graphics.hpp>
#include <string>
#include <cstdint>

class GameWindow : public sf::RenderWindow
{
public:
GameWindow(const uint32_t&, const uint32_t&, const std::string&);
void toggleFullscreen();

static const ResolutionSetting w640h480,
w1600h900,
w1920h1080,
w2560h1440;
private:
class ResolutionSetting
{
public:
ResolutionSetting(const uint32_t& width, const uint32_t& height)
: res(width, height) {}
private:
sf::Vector2u res;
};

std::string _title;
uint32_t _width;
uint32_t _height;
};

我正在尝试初始化 GameWindow 类中的公共(public) ResolutionSetting 对象,其中 ResolutionSetting 类被定义为 GameWindow 中的私有(private) 类。

我看过 this 帖子,它详细介绍了如何初始化类的 static const 成员,但是这不包括所述成员的类型定义为无法从类范围外访问(例如当使用 private 访问规则指定类型时)。

我该如何初始化这些对象?会:

const GameWindow::ResolutionSetting GameWindow::w640h480(640, 480);

const GameWindow::ResolutionSetting GameWindow::w640h480 = GameWindow::ResolutionSetting(640, 480);

够了吗? (假设我可以纠正任何可能的 ResolutionSetting 无法访问的问题)。

最佳答案

suffice? (assuming I can correct any possible issues with ResolutionSetting being inaccessible).

是的,足够了。 GameWindow::ResolutionSetting 可在静态成员的初始化表达式中访问。

所以你可以将它们定义为:

const GameWindow::ResolutionSetting GameWindow::w640h480(640, 480);
const GameWindow::ResolutionSetting GameWindow::w1600h900{1600, 900};
const GameWindow::ResolutionSetting GameWindow::w1920h1080 = GameWindow::ResolutionSetting(1920, 1080);

来自标准,$12.2.3.2/2 Static data members [class.static.data] :

The initializer expression in the definition of a static data member is in the scope of its class ([basic.scope.class]).

Minimal sample

关于c++ - 初始化类的静态常量成员,其中成员是私有(private)类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43197543/

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