如何转换模板中的#define(variadic?) [英] How to convert a #define in a template (variadic?)
问题描述
我有两个宏,我希望在C ++模板中进行转换。
以下是两个宏:
#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(v1,dim0); \
C-> setPositions(vl,dim0); va_end(vl); \
*((T *)(m_values)+ posInValueVector())= val
b $ b
上述两个宏在我的第一个 answer 到此 可用于: 没有可怕的问题宏: I've two macros and I desire to convert them in C++ templates. I've problems in understendig how to convert them. Here are the two macros: The two macros above are used in the software in my first answer to this question. With C++11 and variadic template you can get n-dimensional matrices easily with for example: that can be used with: without the problems of the horrible macros you have now: 这篇关于如何转换模板中的#define(variadic?)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
template< typename T,int ... rest>
struct matrix;
template< typename T,int n>
结构矩阵< T,n> {
T data [n];
matrix(){
for(int i = 0; i
}
}
T& operator [](int index){return data [index]; }
};
模板< 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 < ; k ++){
m [i] [j] [k] = i + j * 2.718 + k * 3.1416;
}
}
}
#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
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;
}
}
}