I was trying to create a user-defined container type with using
and private members in the class, which are not compile-time constants. The is not valid and complained by the compiler. Those private member constants will only be initialized at runtime. Is there such a remedy for this kind of scenario?
#include <vector>
#include <array>
#include <string>
#include <iostream>
class SudokuBoard
{
private:
Board _board_data;
int _BOX_SIZE;
int _BOARD_SIZE;
const int _MAX_VALUE = _BOARD_SIZE;
const int _NUM_CONSTRAINTS = 4;
public:
template <class T, int ROW, int COL>
using Matrix = std::array<std::array<T, COL>, ROW>;
using CoverMatrix = Matrix<int, _BOARD_SIZE * _BOARD_SIZE * _MAX_VALUE, _BOARD_SIZE * _BOARD_SIZE * _NUM_CONSTRAINTS>;
using Board = Matrix<int, _BOARD_SIZE, _BOARD_SIZE>;
SudokuBoard(const std::string& filename);
void set_board_data(int row, int col, int num) { _board_data[row][col] = num; }
int get_board_data(int row, int col) const { return _board_data[row][col]; }
Board get_board_data() const { return _board_data; }
int at(int row, int col) const { return _board_data[row][col]; }
// Prints the Sudoku board
friend void print_board(const SudokuBoard& board);
friend std::ostream& operator<< (std::ostream &out, const SudokuBoard& board);
int indexInCoverMatrix(int row, int col, int num);
int createBoxConstraints(CoverMatrix coverMatrix, int header);
int createColumnConstraints(CoverMatrix coverMatrix, int header);
int createRowConstraints(CoverMatrix coverMatrix, int header);
int createCellConstraints(CoverMatrix coverMatrix, int header);
void createCoverMatrix(CoverMatrix coverMatrix);
void convertToCoverMatrix(Board board, CoverMatrix coverMatrix);
};