【问题标题】:A template with variable number of types具有可变数量类型的模板
【发布时间】:2009-08-16 09:23:04
【问题描述】:

我想写一个这样的 C++ 模板:

template <class Type1, class Type2, class Type3,....>

    class MyClass
    {
    //...
    };

但是,“类型的数量”是可变的。

例如,用户可以创建具有 3 种类型的对象:

MyClass<int, int, int> obj;

或者他可以创建一个有 5 种类型的对象:

MyClass<int, int, int, int, int> obj;

换句话说,我想要用户:
1.注明字段数。
2.根据字段数设置类型。

我该怎么做?

提前致谢。

【问题讨论】:

  • 您可以查看 Boost.MPL:boost.org/doc/libs/1_39_0/libs/mpl/doc/index.html,尤其是 boost::mpl::vector
  • 出于兴趣,你打算如何命名这些字段?
  • 我没有想到,这可能是一个程序,但我认为答案可能有他们的方法。

标签: c++ stl templates visual-c++


【解决方案1】:

Variadic templates. C++0x:(

只是提到你可以在当前的 C++ 中解决这个问题。比如你可以看看Boost::tuple

#include <boost/tuple/tuple.hpp>

int main()
{
    boost::tuple<int, double> tuple1(4, 2.0);
    boost::tuple<int, double, double> tuple2(16, 4.0, 2.0);
}

您不能为元组分配 变量 数量的类型,boost::tuple 最多只允许 10 种类型。我认为litb 在之前的答案中展示了如何做到这一点,但我找不到。

【讨论】:

  • 不幸的是,这只适用于实现(这部分)C++1x 的编译器。 (顺便说一句,哪些人会这样做?)
  • @sbi 你的意思是元组吗?它正在增强,它不需要可变参数模板以这种方式工作。
  • @AraK:该死,这真是个脑残。它指的是您帖子顶部的“可变参数模板”,而不是其余部分。对困惑感到抱歉。昨晚已经很晚了。
  • GCC 4 支持可变参数模板 :)
【解决方案2】:

我认为你应该看看 Alexandrescu 的书 Modern C++ Design。关于类型列表的第 3 章似乎非常接近您想要的。

【讨论】:

    【解决方案3】:

    据我所知,目前唯一的解决方案是为每个案例编写一个单独的模板。在某些情况下,您可能可以使用枚举来键入映射或类型列表,但我们需要先了解更多关于您想对这些类型做什么。

    【讨论】:

      【解决方案4】:

      您所做的是编写该模板,以便它接受足够多的参数,但为所有参数提供默认参数。然后,您使用模板元编程来筛选参数并清除默认参数。

      听取 Neils 的建议并购买 MC++D。这就是我们大多数人学习这项技术的方式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多