我需要泛化一个C++类型定义,所以我不需要复制和粘贴很多代码。我正在使用boost序列化闪电战数组,并且我正在定义我自己的load和save方法,并且需要基于模板参数来执行此操作。基本上我不知道如何概括
typedef blitz::Array<double, 2> my_Matrix; 对于高阶张量,我想将上面的推广到1,2,…,n,如果可能的话,对类型做同样的事情。
我猜我是在追逐一个类似于typedef模板的东西。
发布于 2010-07-16 20:29:39
我不太了解闪电战数组,但是你应该能够把typedef放在一个模板化的结构中。例如,像这样:
template<int N>
struct Matrix
{
typedef blitz::Array<double,N> Type;
};像这样使用Matrix<3>::Type。
至于你的另一个关于序列化的问题,请查看array的文档:
http://www.oonumerics.org/blitz/manual/blitz02.html
看起来你只需要用一个size()调用来代替rows * cols的大小测试。对于秩大于2的矩阵,data()方法应该仍然有效。
发布于 2010-07-16 21:12:41
C++0x拥有它:
template <size_t N>
using MyMatrix<N> = blitz::Array<double,N>;但是,无论如何,您仍然需要一个用于load和save的模板方法。
发布于 2010-07-16 21:35:41
typedef实际上只是为某些东西创建了另一个名称。这不太像做#define,但很接近。作为另一个名字,你真的不能对他们做任何事情,你不能用他们要替换的确切名字做任何事情。
你可以做的就是一直使用#define。如下所示:
#define my_Matrix(X) blitz::Array<X>就我个人而言,我讨厌预处理器,并希望将其从语言中删除。
https://stackoverflow.com/questions/3264782
复制相似问题