将变量模板化类的模板参数解包为常量和常量数组
Unpacking template parameters of a variadic templated class to constants and array of constants
我对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
这是一个部分答案,它执行order_const
和size_const
。但是我还不知道怎么做dim_const
。
#include<iostream>
using namespace std;
template<typename T, unsigned int... TDIM>
class VariadicTest;
template<typename T>
class VariadicTest<T>
{
public:
static const unsigned int order_const = sizeof...(TDIM);
static const unsigned int size_const = 1;
};
template<typename T, unsigned int baseTDIM, unsigned int... others>
class VariadicTest<T, baseTDIM, others...>
{
public:
static const unsigned int order_const = sizeof...(TDIM);
static const unsigned int size_const = baseTDIM * VariadicTest<T,others...> :: size_const;
};
int main() {
VariadicTest<double, 9, 4, 5> x;
cout << x.order_const << endl;
cout << x.size_const << endl;
}
相关文章:
- C++常量数组的编译时间较长
- 从另一个静态常量数组初始化静态常量数组(只需少量计算)
- 使用双指针传递 2D 常量数组
- 检查输入 std::array 指针数据是否等于某个常量数组
- 如何在可执行文件中存储常量数组?
- 常量数组如何在每个元素中只能包含字符,而 char* 数组能够指向每个元素中的字符串?
- LLVM 无法将数组类型强制转换为常量数组
- 如何在C++中的单行中返回常量数组中的值
- C++ 具有常量数组和initializer_list的重载构造函数
- 在可变参数构造函数中初始化常量数组
- 非常量数组
- C/C++ 中的常量数组和静态常量数组有什么区别
- C++全局常量数组:是否保证合并(优化)到一个副本中
- 在常量数组上使用指针遍历
- 具有函数指针常量数组的 C++ 模板化静态类
- 字符常量数组为空,即使已为其赋值 [C++]
- 指向常量数组的指针
- 函数指针的常量数组令人困惑
- 在 c++ 中初始化静态常量数组
- 常量数组类成员初始化