【发布时间】:2011-08-25 09:35:44
【问题描述】:
我想知道是否有可能使以下answer 更通用,因为数组的类型是模板化的,而不仅仅是无符号的:
我已将整个内容封装在一个结构中,如下所示:
template<typename ArrayType>
struct Array
{
template<ArrayType... args> struct ArrayHolder {
static const ArrayType data[sizeof...(args)];
};
template<ArrayType... args>
const ArrayType ArrayHolder<args...>::data[sizeof...(args)] = { args... };
template<size_t N, template<size_t> class F, ArrayType... args>
struct generate_array_impl {
typedef typename generate_array_impl<N-1, F, F<N>::value, args...>::result result;
};
template<template<size_t> class F, ArrayType... args>
struct generate_array_impl<0, F, args...> {
typedef ArrayHolder<F<0>::value, args...> result;
};
template<size_t N, template<size_t> class F>
struct generate_array {
typedef typename generate_array_impl<N-1, F>::result result;
};
};
但我收到以下错误:
c++-4.6 -std=c++0x -o test test.cpp
test.cpp:49:17: error: specializing member ‘Array<ArrayType>::ArrayHolder<args>::data’ requires ‘template<>’ syntax
【问题讨论】:
-
在显示编译器错误和代码时,在代码中指出编译器抱怨的确切行(即第 49 行?)通常很有帮助
标签: c++ arrays static metaprogramming