Variadic模板化类:根据构造函数参数推断类型

时间:2013-11-03 01:44:09

标签: c++ templates variadic-templates

我有一个固定大小的混合容器,我们称之为FixMix。我希望能够调用构造函数,这样我就不需要编写类型参数了,因为编译器可以推断出提供给构造函数的类型。 IE,而不是:

FixMix<float, double> a(2.5f, 3.5);

我想简化它:

FixMix a(2.5f, 3.5);

使用可变参数模板的函数已经这样做了,所以我想知道构造函数是否也可以这样。这是FixMix的基本类定义:

template<typename... item_t> class FixMix {
    public:
        FixMix(void) {}
        FixMix(item_t... items); //This is what I want to change
        ~FixMix(void);
};

在可变参数模板上没有很多阅读材料,至少没有一个可以回答这个问题,所以我一直试图找出我自己的语法,但无济于事。如果它甚至可能的话,那就是省略了我的意思。

如果它有任何区别我正在使用Visual C ++ 2013。

1 个答案:

答案 0 :(得分:2)

我不认为你可以在构造函数中执行它,但是你可以使用自由函数和auto来避免重复类型。这样的事情应该有效:

template <typename... ARGS>
FixMix<ARGS...> make_FixMix(ARGS&&... args)
{
  return FixMix<ARGS...>(std::forward<ARGS>(args)...);
}

用法:

auto var=make_FixMix(2.5f,3.5);