我正在创建一个库,以允许OCaml/Haskell-like代数数据类型和模式匹配。代数数据类型使用类似于Boost.Variant的类来实现。我希望能够在模板参数中定义新的类型(构造函数),但是我得到一个错误。我用variadic模板使用自己的类型,但为了简单起见,我将在此使用Boost的variant
。为什么不是这样的:为什么你不能在C++模板参数中定义新类型?
typedef variant <
class Foo { ... },
class Bar { ... }
> Baz;
允许?我知道我可以分别定义类型,但这意味着我不能使用一些很好的宏。在大多数情况下,在C++中,你是允许你在哪里使用它来定义一个新的类型,例如:
struct Foo { ... } bar;
这里我定义了一个新的类型Foo
和Foo
类型的变量bar
。如果允许这样的事情,为什么它不适用于模板?
这与此无关。 – Zifre 2009-06-04 22:45:49