Je crée une bibliothèque pour autoriser les types de données algébriques de type OCaml/Haskell et la correspondance de formes. Les types de données algébriques sont implémentés en utilisant une classe similaire à Boost.Variant. Je voudrais pouvoir définir de nouveaux types (le constructeur) dans les arguments du template, mais j'obtiens une erreur. J'utilise mon propre type avec des modèles variés, mais j'utiliserai ici variant
de Boost pour plus de simplicité. Pourquoi ce n'est pas quelque chose comme ceci:Pourquoi ne pouvez-vous pas définir de nouveaux types dans un argument de modèle C++?
typedef variant <
class Foo { ... },
class Bar { ... }
> Baz;
autorisé? Je sais que je peux définir les types séparément, mais cela signifie que je ne peux pas utiliser de belles macros. Dans la plupart des cas en C++, vous êtes a permis de définir un nouveau type où vous utilisez, par exemple:
struct Foo { ... } bar;
Ici, je suis en train de définir un nouveau type Foo
et une bar
variable de type Foo
. Si des choses comme ça sont autorisées, pourquoi cela ne fonctionne-t-il pas avec les templates?
Cela n'a rien à voir avec cela. – Zifre