如何在模板中转换#Define(variadic?)
How to convert a #define in a template (variadic?)
我有两个宏,我希望在C 模板中转换它们。我在Letterendig中如何转换它们。
这是两个宏:
#define __MATRIX_GETVALUE(C,T,val,dim0...)
va_list vl;
va_start(vl,dim0);
C->setPositions(vl,dim0); va_end(vl);
val = *((T *)(m_values)+posInValueVector())
#define __MATRIX_SETVALUE(C,T,val,dim0...)
va_list vl;
va_start(vl,dim0);
C->setPositions(vl,dim0); va_end(vl);
*((T *)(m_values)+posInValueVector())=val
在我对此问题的第一个回答中,上面的两个宏都使用了该软件。
带有C 11和variadic模板,您可以轻松获得n维矩阵,例如:
template<typename T, int ...rest>
struct matrix;
template<typename T, int n>
struct matrix<T, n> {
T data[n];
matrix() {
for (int i=0; i<n; i++) {
data[i] = T(0);
}
}
T& operator[](int index) { return data[index]; }
};
template<typename T, int n, int ...rest>
struct matrix<T, n, rest...> {
matrix<T, rest...> data[n];
matrix<T, rest...>& operator[](int index) { return data[index]; }
};
可以与:
一起使用matrix<double, 10, 9, 4> m;
for (int i=0; i<10; i++) {
for (int j=0; j<9; j++) {
for (int k=0; k<4; k++) {
m[i][j][k] = i + j*2.718 + k*3.1416;
}
}
}
没有您现在遇到的可怕宏的问题:
- 保留名称
- 常规名称注入
- 参数的多次评估
- variadic C函数调用
- 将矩阵对象状态用于"当前位置"
相关文章:
- Variadic模板未编译
- variadic模板中的模板参数推导失败
- 与C代码相比,为什么C++代码不需要"#define _POSIX_C_SOURCE 200809L"?
- 以下 C++ 代码用于 -> "#define idiv(a, b) (((a) + (b) / 2) / (b))" 是什么?
- 如何以静态代码分析友好的方式使用 #define 防护?
- C++相当于整数的 #define
- [temp.variadic]中关于包扩展实例化的措辞
- #define Dbg(fmt,..) (0) 是什么意思? 警告:表达式无效
- 在C++中使用变量而不是"#define"来指定数组大小是不是一种糟糕的做法?(C错误:在文件范围内
- 我们可以用 C 语言嵌套 #define 和 #if 吗?
- 如何将旧的 C 样式 #define 映射与现代C++进行调整?
- 找不到 #define 的函数定义
- "#define X X"是什么意思?
- 使用 constexpr 替换 #define 和 #ifdef 进行条件编译
- 野牛/flex:计算器将双精度值解释为整数,所以我添加了 YYSTYPE 双精度 #define 但我有多个编译错误
- 如何解决C++中声纳库贝静态代码分析错误"Explicitly define the missing copy constructor, move constructor .."
- c中 #define 的不足
- 使用 [#define & #ifdef] 跨文件激活代码块
- 如何避免#define语法的变量重新声明
- 如何在模板中转换#Define(variadic?)