c++ - 将可变模板类的模板参数解包为常量和常量数组

标签 c++ templates variadic-templates unpack

我对 C++2011 的可变参数模板很陌生,我想知道是否存在执行以下操作的技巧:

template<typename T, unsigned int... TDIM> class VariadicTest
{
    public:
        static const unsigned int order_const = sizeof...(TDIM);
        static const unsigned int size_const = // TDIM1*TDIM2*TDIM3...
        static const unsigned int dim_const[order_const] = // {TDIM1, TDIM2, TDIM3...} 
                                                          // if not possible : 
                                                          // dim_const[64] = {TDIM1, TDIM2, TDIM3, 0, ..., 0}

};

做这样的事情有什么“技巧”吗?

非常感谢。

最佳答案

下面是另外两个功能的实现方式:

template<unsigned int... T> struct mul;
template<unsigned int L,unsigned int... T> struct mul<L,T...>
{
static const int val= L*mul<T...>::val;
};
template<unsigned int L> struct mul<L>
{
static const int val= L;
};

template<typename T, unsigned int... TDIM> class VariadicTest
{
    public:
        static const unsigned int order_const = sizeof...(TDIM);
        static const unsigned int size_const = mul<TDIM...>::val;
        static const unsigned int dim_const[order_const];
};
template<typename T, unsigned int... TDIM> 
const unsigned int VariadicTest<T,TDIM...>::dim_const[order_const] = {TDIM...};

测试:http://liveworkspace.org/code/cfb0ec09a05931cfcc00edf29866e716

关于c++ - 将可变模板类的模板参数解包为常量和常量数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11804760/

相关文章:

c++ - 在 VisualStudio2008 中获取用于开发的 libpng 的最快和最简单的方法是什么?

c++ - 抑制 system() 控制台输出

c++ - 具有编译时间常数的虚函数

c++ - 确保枚举对应某种模板类型

c++ - 使用声明的可 rebase 类无法在 MSVC 中编译

c++ - 是否可以创建模板模板参数列表?

c++ - 将数据从 QSqlTableModel 转换为 QTableView 中的人形(enum -> String)

c++ - “使用类模板需要模板参数”错误,并带有默认指定的非类型模板参数值

javascript - Json 数据未使用each append 到Meteor 模板中

C++ typelist make 子列表