Я хотел бы знать, как определить тип данных, который позволит мне уровни косвенности неизвестны во время компиляции (если это вообще возможно). Вы можете найти больше информации о проблеме ниже. Кроме того, мне бы очень хотелось альтернативных решений этой проблемы.
Номер игры - это пара списков других номеров игры. В литературе они представлены как <{x, y, z, ...}: {a, b, c, ...}>, где каждый a, b, ... равен другому <{.. .}: {...}>. Например, <{}: {}> (= 0) и <{<{}: {}>}: {}} (= 1) являются действительными игровыми номерами.
Этот номер передает соответствующую информацию о игра анализируется. В ручку и бумагу я могу выяснить эти цифры. Моя трудность заключается в том, чтобы перевести их в действительные типы C ++. На данный момент я могу представить их только деревьями, но я бы хотел сохранить их в векторах.
Я бы хотел GAME = pair<vector<GAME>,vector<GAME>>
в рекурсивном определении. Поэтому я попытался:
template<typename T, typename U>
constexpr auto game = std::tuple<vector<T>, vector<U>>;
Моя идея заключается в том, что T может быть игрой любой глубины (любого уровня <{<{<{<{..., как в примере, который я показал). Однако с этим кодом (типом) я не смог выполнить sh того, что хотел. </p>
В качестве примера я хотел бы, чтобы сработало следующее (это была бы рекурсивная функция, которая будет строить левый и правый наборы). (неизвестного типа до выполнения - я знаю, что это никогда не сработает)):
template<typename T, typename U>
game<T,U> evaluate_game_fixed(int_mat&, semi_board){}
Однако, похоже, я не могу иметь шаблоны только для возвращаемых типов.
У меня был трудный время, когда этот вопрос озаглавлен, потому что я сталкиваюсь с этой концептуальной проблемой больше, чем с языком, так что извините, если он вводит в заблуждение или не соответствует действительности c. Подводя итог, я хотел бы знать, как определить тип данных, который позволит мне уровни косвенности неизвестны во время компиляции.