我正在創建一個庫,以允許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