Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么可以';你不能在C&x2B中定义新类型吗+;模板参数?_C++_Templates - Fatal编程技术网

C++ 为什么可以';你不能在C&x2B中定义新类型吗+;模板参数?

C++ 为什么可以';你不能在C&x2B中定义新类型吗+;模板参数?,c++,templates,C++,Templates,我正在创建一个库,以允许类似于OCaml/Haskell的代数数据类型和模式匹配。代数数据类型使用类似于的类实现。我希望能够在模板参数中定义新的类型(构造函数),但我得到了一个错误。我使用我自己的类型和可变模板,但为了简单起见,我将在这里使用Boost的variant。为什么不是这样的: typedef variant < class Foo { ... }, class Bar { ... } > Baz; 在这里,我定义了一个新类型Foo,以及一个Foo类型的变

我正在创建一个库,以允许类似于OCaml/Haskell的代数数据类型和模式匹配。代数数据类型使用类似于的类实现。我希望能够在模板参数中定义新的类型(构造函数),但我得到了一个错误。我使用我自己的类型和可变模板,但为了简单起见,我将在这里使用Boost的
variant
。为什么不是这样的:

typedef variant <
    class Foo { ... },
    class Bar { ... }
> Baz;

在这里,我定义了一个新类型
Foo
,以及一个
Foo
类型的变量
bar
。如果这样的事情是允许的,为什么它不能与模板一起工作?

除了它不在那里,我想没有人建议添加它,或者如果有,没有足够的支持之外,真的没有其他原因

如果你想继续,我建议从标准委员会开始


我想这是因为模板参数的处理方式与函数参数类似,您不能声明

void func( class A{} a, class B{} b );

要么。我还认为,如果您需要多个模板(typedef)中的类,那么就不可能遵守规则。

我认为即将推出的类非常接近,尽管与您描述的不完全相同。

这与此无关。
void func( class A{} a, class B{} b );