Я создаю библиотеку, позволяющую использовать OCaml / Haskell-подобные алгебраические типы данных и сопоставление с образцом. Алгебраические типы данных реализованы с использованием класса, аналогичного Boost.Variant . Я хотел бы иметь возможность определять новые типы (конструктор) в аргументах шаблона, но я получаю ошибку. Я использую свой собственный тип с шаблонами переменных, но я буду использовать Boost's variant
здесь для простоты. Почему не так:
typedef variant <
class Foo { ... },
class Bar { ... }
> Baz;
разрешено? Я знаю, что могу определять типы отдельно, но это означает, что я не могу использовать некоторые хорошие макросы. В большинстве случаев в C ++ вам разрешено определять новый тип, в котором вы его используете, например:
struct Foo { ... } bar;
Здесь я определяю новый тип Foo
и переменную bar
типа Foo
. Если такие вещи разрешены, то почему они не работают с шаблонами?