gpt4 book ai didi

c++ - 特定类型的可变参数模板

转载 作者:IT老高 更新时间:2023-10-28 22:14:36 26 4
gpt4 key购买 nike

我想要一个只接受无符号整数的可变参数模板。但是,我无法让以下工作。

struct Array
{
template <typename... Sizes> // this works
// template <unsigned... Sizes> -- this does not work (GCC 4.7.2)
Array(Sizes... sizes)
{
// This causes narrowing conversion warning if signed int is supplied.
unsigned args[] = { sizes... };
// ...snipped...
}
};

int main()
{
Array arr(1, 1);
}

任何帮助表示赞赏。

编辑:如果您想知道,我正在尝试使用可变参数模板来复制以下内容。

struct Array
{
Array(unsigned size1) { ... }
Array(unsigned size1, unsigned size2) { ... }
Array(unsigned size1, unsigned size2, unsigned size3) { ... }
// ...
Array(unsigned size1, unsigned size2, ..., unsigned sizeN) { ... }
};

最佳答案

我不确定你为什么期望它会起作用。 Clang 告诉我错误是 unknown type name 'Sizes'在构造函数的声明中。这是意料之中的,因为 Sizes不是类型(或者更确切地说,类型的模板包),它是值的模板包。

目前还不清楚您究竟想在这里做什么。如果将整数值作为模板参数传入,构造函数参数应该是什么?


更新:有了新代码,您只需要一个 static_cast<unsigned>() .

struct Array
{
template <typename... Sizes> // this works
Array(Sizes... sizes)
{
unsigned args[] = { static_cast<unsigned>(sizes)... };
// ...snipped...
}
};

关于c++ - 特定类型的可变参数模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13636290/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com