我想要一个简单接受无符号整数的可变参数模板.但是,我无法让以下工作.
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);
}
Run Code Online (Sandbox Code Playgroud)
任何帮助赞赏.
编辑:如果你想知道,我正在尝试使用可变参数模板来复制以下内容.
struct Array
{
Array(unsigned size1) { ... }
Array(unsigned size1, unsigned size2) { ... }
Array(unsigned size1, unsigned size2, unsigned size3) { ... }
// ... …Run Code Online (Sandbox Code Playgroud) 我想写一个模板函数,如下所示:
template <typename T>
void f( const T & ...args ) // <-- This doesn't work, unfortunately.
{
std::array<T> arr = { args... };
// and so forth.
}
Run Code Online (Sandbox Code Playgroud)
显然,C++不允许这样做,因为左侧需要一个模板参数包...args才能使用.我想要的是一个模板函数,其中所有参数类型都相同.有一个简单的方法吗?