Определите тип, который допускает уровни косвенности («древовидный»). Представление комбинаторных игровых чисел - PullRequest
0 голосов
/ 08 апреля 2020

Я хотел бы знать, как определить тип данных, который позволит мне уровни косвенности неизвестны во время компиляции (если это вообще возможно). Вы можете найти больше информации о проблеме ниже. Кроме того, мне бы очень хотелось альтернативных решений этой проблемы.

Номер игры - это пара списков других номеров игры. В литературе они представлены как <{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. Подводя итог, я хотел бы знать, как определить тип данных, который позволит мне уровни косвенности неизвестны во время компиляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...