首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++:可变模板参数(用于遗传算法)

C++:可变模板参数(用于遗传算法)
EN

Stack Overflow用户
提问于 2009-04-22 08:24:47
回答 3查看 3.3K关注 0票数 1

我正在使用C++、MPI和CUDA编写并行进化算法库。我需要从面向对象的设计中提取原始数据,并将其粘贴到平面数组(或std::stl-mpi)中,以便将其发送到节点或cuda设备。

整个设计相当复杂,有大量的继承,以保持库的灵活性。但感兴趣的类别如下:

基因组类-包含数据向量。浮标或汽笛。

群体类-包含基因组对象的载体,并与基因组对象相关联。

首先创建一个基因组对象,然后将对它的引用传递给人口类构造器,该构造函数根据传递的基因组创建自己的基因组向量。(希望这是合理的!)

所以我想我应该添加另一个成员向量,比如rawData到人口类中。但是rawData的类型需要依赖于存储在基因组(或原始基因组对象)中的数据类型。

问题就在这里,据我所知,没有办法动态地设置传递给模板的类型。

我的伪代码是

代码语言:javascript
复制
class genome {
    std::vector<bool> data;
}

template <class T>
class population {
    std::vector<genome> population;
    std::vector<T> rawData;
    void PackDataIntoRawData();
};

然后,当我创建人口(实际上是另一个类的成员对象)时,我会调用:

代码语言:javascript
复制
genome myBitGenome();
population<type of myBitGenome.data> pop(myBitGenome);

是否有这样做的,或者有人能建议另一种方式来实现这一点。

提前感谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-04-22 08:40:56

就动态类型而言,助推::变式是一个非常强大的工具。

但是您的问题似乎相当简单,所以我建议您这样做:

代码语言:javascript
复制
template<typename DataPiece>
class Genome {
    typedef std::vector<DataPiece> Data;
    Data data;
}

template <class T_Genome>
class Population {
    std::vector<T_Genome> population;
    typedef typename T_Genome::Data Data;
    Data rawData;
    void PackDataIntoRawData();
};

然后用它:

代码语言:javascript
复制
typedef Genome<bool> MyGenome;
MyGenome myBItGenome;
Population<MyGenome> pop( myBitGenome );
票数 0
EN

Stack Overflow用户

发布于 2009-04-22 08:38:43

我不太明白这个问题。你不需要把“原始数据”转化成基因组吗?你为什么要储存它?如果需要特殊的函数来处理不同类型的原始数据,则不需要模板,只需使用函数重载即可。

票数 0
EN

Stack Overflow用户

发布于 2009-04-22 08:42:53

我不明白为什么您也需要将rawData存储为成员。

您看过boost序列化库吗?

您只需为每个类提供序列化函数或方法。STL集合的方法&已经提供了原语。

例如。

代码语言:javascript
复制
template <class T_Genome>
class Population {
    template<class Archive>
    void serialize(Archive& ar, const unsigned int version)
    {
        using namespace boost::serialization;
        ar & BOOST_SERIALIZATION_NVP(population);
        // ...
    }

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

https://stackoverflow.com/questions/776182

复制
相关文章

相似问题

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