我需要概括一个C ++ typedef,所以我不需要复制和粘贴很多代码。我正在使用boost序列化闪电战阵列,我正在定义自己的负载并保存方法,需要根据模板参数执行此操作。基本上我不知道如何概括
typedef blitz::Array<double, 2> my_Matrix;
对于更高阶的张量,即,我想概括上面的内容,以便它将需要1,2,...,n,如果可能的话,对于该类型也是如此。
我想我正在追逐类似于typedef的模板。
答案 0 :(得分:4)
对blitz数组不太了解,但你应该能够将typedef放在模板化的结构中。例如。类似的东西:
template<int N>
struct Matrix
{
typedef blitz::Array<double,N> Type;
};
使用如此Matrix<3>::Type
。
关于序列化的其他问题,请查看数组文档:
http://www.oonumerics.org/blitz/manual/blitz02.html
看起来你可以通过调用size()来替换行* cols test for size。 data()方法仍应适用于排名> 1的矩阵。 2。
答案 1 :(得分:0)
C ++ 0x有它:
template <size_t N>
using MyMatrix<N> = blitz::Array<double,N>;
但是,无论如何,您仍然需要load
和save
的模板方法。
答案 2 :(得分:0)
typedef实际上只是为某些东西创建另一个名称。这不像是#define
,而是接近它。作为另一个名字,你无法对他们做任何与他们正在取代的确切名称无关的事情。
你可以做的就是一路走下去并使用#define
。像这样:
#define my_Matrix(X) blitz::Array<X>
就个人而言,我讨厌预处理器,并希望将其从语言中删除。