代码之家  ›  专栏  ›  技术社区  ›  Zifre

为什么不能在C++模板参数中定义新类型?

  •  2
  • Zifre  · 技术社区  · 17 年前

    Boost.Variant 。我希望能够在模板参数中定义新类型(构造函数),但我遇到了一个错误。我使用自己的类型和可变模板,但我会使用Boost的 variant 这里为了简单起见。为什么不是这样的:

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

    允许在您使用它的地方定义一个新类型,例如:

    struct Foo { ... } bar;
    

    Foo ,以及一个变量 bar 富 。如果允许这样的事情,为什么它不适用于模板?

    3 回复  |  直到 17 年前
        1
  •  2
  •   Lou Franco    17 年前

    真的没有原因,除了它不在那里,我想它还没有被提议添加,或者即使有,也没有得到足够的支持。

    http://www.open-std.org/Jtc1/sc22/wg21/

        2
  •  1
  •   lothar    17 年前

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

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

    要么。我也认为不可能遵守 ODR 如果你需要多个模板(typedef)中的类。

        3
  •  -1
  •   Nikolai Fetissov    17 年前

    我想来 C++0x Concepts 它们非常接近,尽管与你描述的不完全相同。