初始化类的静态常量成员,其中成员是私有类型?
问题描述:
// 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
类,其中ResolutionSetting
类被定义为一个private
类中GameWindow
内初始化公共ResolutionSetting
对象。初始化类的静态常量成员,其中成员是私有类型?
我看到this交详细介绍了如何初始化类static
const
构件,但是这不包括的情况下,当所述部件的类型定义为从外部类范围(被指定的类型,当诸如不可访问与private
访问规则)。
我该如何去初始化这些对象?请问:
const GameWindow::ResolutionSetting GameWindow::w640h480(640, 480);
或
const GameWindow::ResolutionSetting GameWindow::w640h480 = GameWindow::ResolutionSetting(640, 480);
就够了? (假设我可以更正ResolutionSetting
无法访问的任何可能的问题)。
答
够了吗? (假设我可以更正ResolutionSetting无法访问的任何可能的问题)。
是的。 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]:
在静态数据成员定义中的初始化表达式是同类的范围([ basic.scope.class])。