2017-04-04 170 views
1
// 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交详细介绍了如何初始化类staticconst构件,但是这不包括的情况下,当所述部件的类型定义为从外部类范围(被指定的类型,当诸如不可访问与private访问规则)。

我该如何去初始化这些对象?请问:

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

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

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

回答

1

够了吗? (假设我可以更正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])。

Minimal sample