Возможный способ - сохранить функцию вместо значения в вашей матрице, например:
std::array<std::array<std::function<Value(), MaxColumn>, MaxRow> spreadsheet;
switch(type) {
case 1:
//if the user wants to input a number to the cell
cout << "what number would you like to replace it with?\n";
cin >> replacenum;
spreadsheet[row][column] = [=]() { return replacenum; };
break;
case 2:
//if the user wants to put an equation in a cell
cout << "what operator would you like to use? (+,-,*,/,%)\n";
cin >> operation;
cout << "enter the row on the first cell\n";
cin >> row1;
cout << "enter the column on the first cell\n";
cin >> column1;
cout << "enter the row on the second cell\n";
cin >> row2;
cout << "enter the column on the second cell\n";
cin >> column2;
cout << "calculating...";
row1--;
column1--;
row2--;
column2--;
if (operation == '+') {
spreadsheet[row][column] = [=, &spreadsheet](){ return spreadsheet[row1][column1]() + spreadsheet[row2][column2](); };
} else if (operation == '-') {
spreadsheet[row][column] = [=, &spreadsheet](){ return spreadsheet[row1][column1]() - spreadsheet[row2][column2](); };
} else if (operation == '*') {
spreadsheet[row][column] = [=, &spreadsheet](){ return spreadsheet[row1][column1]() * spreadsheet[row2][column2](); };
} else if (operation == '/') {
spreadsheet[row][column] = [=, &spreadsheet](){ return spreadsheet[row1][column1]() / spreadsheet[row2][column2](); };
}
}
Чтобы получить значение, как вы могли заметить, вы должны используйте ()
.
Осторожно, если вы создаете цикл, вы создаете бесконечный l oop для вычисления значения ячейки.