c++ 如何重复模板参数一定的次数?

dgsult0t  于 2023-01-06  发布在  其他
关注(0)|答案(1)|浏览(134)

我正在写一个模板类,我想用一个tuple来保存一些数据,tuple的类型与模板参数的关系是这样的:

template<typename ...Types>
class MyClass{
     public:
          std::tuple<int, (repeat "int" sizeof...(Types) times)> MyData;
}

例如,MyClass<int, float, std::string, double>会导致std::tuple<int, int, int, int>类型的MyData变量。我已经研究了fold表达式,但我不确定它们是否能做我想要的事情。在C++中有办法做到这一点吗?如果有,怎么做?

cclgggtu

cclgggtu1#

正如在注解中所说的,使用std::array,但是,为了完整性:
您可以使用std::conditional

#include <string>
#include <tuple>
#include <type_traits>

template<typename ...Types>
struct TupleN { std::tuple<typename std::conditional<true, int, Types>::type...> MyData; };

static_assert(std::is_same_v<decltype(TupleN<int, float, std::string, double>::MyData),
              std::tuple<int, int, int, int>>);

您也可以自己卷:

template<typename T> struct Ignore { using type = int; };

相关问题