可变参数模板化类:基于构造函数参数推断类型

Variadic Templated Classes: Infer types based on constructor parameters

本文关键字:参数 构造函数 类型 变参      更新时间:2023-10-16

我有一个固定大小的混合容器,我们称之为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。

我认为你不能在构造函数中做到这一点,但你可以使用自由函数和 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);