首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Typedef泛化

Typedef泛化
EN

Stack Overflow用户
提问于 2010-07-16 20:26:05
回答 3查看 268关注 0票数 2

我需要泛化一个C++类型定义,所以我不需要复制和粘贴很多代码。我正在使用boost序列化闪电战数组,并且我正在定义我自己的load和save方法,并且需要基于模板参数来执行此操作。基本上我不知道如何概括

代码语言:javascript
复制
typedef blitz::Array<double, 2> my_Matrix; 

对于高阶张量,我想将上面的推广到1,2,…,n,如果可能的话,对类型做同样的事情。

我猜我是在追逐一个类似于typedef模板的东西。

EN

回答 3

Stack Overflow用户

发布于 2010-07-16 20:29:39

我不太了解闪电战数组,但是你应该能够把typedef放在一个模板化的结构中。例如,像这样:

代码语言:javascript
复制
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()方法应该仍然有效。

票数 4
EN

Stack Overflow用户

发布于 2010-07-16 21:12:41

C++0x拥有它:

代码语言:javascript
复制
template <size_t N>
using MyMatrix<N> = blitz::Array<double,N>;

但是,无论如何,您仍然需要一个用于loadsave的模板方法。

票数 0
EN

Stack Overflow用户

发布于 2010-07-16 21:35:41

typedef实际上只是为某些东西创建了另一个名称。这不太像做#define,但很接近。作为另一个名字,你真的不能对他们做任何事情,你不能用他们要替换的确切名字做任何事情。

你可以做的就是一直使用#define。如下所示:

代码语言:javascript
复制
#define my_Matrix(X) blitz::Array<X>

就我个人而言,我讨厌预处理器,并希望将其从语言中删除。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3264782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档