← index
cplusplus11.Examples/constexpr/constexpr_example.cpp
Source: cplusplus11.Examples/constexpr/constexpr_example.cpp
#include<iostream>

constexpr int bysize(const int size) {
    return size/16; // can only be on liner in C++11
}

constexpr int w = 640;
constexpr int h = 480;


template<typename T, int w, int h>
class Tile {
public:
    
    Tile() {
        init();
    }
    
    T tiles[bysize(w)][bysize(h)];
    
    void init() {
        
        for(unsigned int i = 0; i < bysize(w); ++i) {
            for(unsigned int z = 0; z < bysize(h); ++z) {
                tiles[i][z] = T();
            }
        }
    }
    
    void setTile(const int x, const int y, const T value) {
        tiles[x][y] = value;
    }
    
    
    const T& operator()(const int x, const int y) {
        return tiles[x][y];
    }
};


int main(void) {
    
    Tile<int, w, h> tiles;
    
    tiles.setTile(39, 29, 256);
    
    for(unsigned int i = 0; i < bysize(w); ++i) {
        for(unsigned int z = 0; z < bysize(h); ++z) {
            std::cout << "Tile at (" << i << ", " << z << "): " << tiles(i, z) << "\n";
        }
    };
    
    return 0;
}