【发布时间】:2012-11-18 03:31:27
【问题描述】:
我想要一个只接受无符号整数的可变参数模板。 但是,我无法让以下工作。
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) { ... }
};
【问题讨论】:
-
请举例说明。
-
而这个 arr(1, 1) 会是一个二维数组吗?还是一个初始值为 {1, 1} 的数组?
-
不幸的是,没有语法可以接受可变数量的相同类型的参数。 ://
-
@OlafDietsche:二维数组。
-
@Xeo:我希望复制手动扩展的 Array c'tor,其中包含重载数量的无符号参数(我之前最多有 10 个)。
标签: c++ gcc c++11 variadic-templates