首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何存储TypeInfo

如何存储TypeInfo
EN

Stack Overflow用户
提问于 2009-10-16 13:05:07
回答 3查看 4.2K关注 0票数 7
代码语言:javascript
复制
  class A {}
  A a;
  type_info info = typeid (a); // error type_info is private

我想要一个列表list<type_info>来存储类的类型。有解决办法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-10-16 13:09:02

不能直接实例化type_info类的对象,因为该类只有一个私有副本构造函数。因为列表需要复制构造函数..。

如果您真的需要它,请使用std::list< type_info*>。

我不知道你为什么需要这个列表,但我会考虑一个替代设计,如果可能的话,不涉及RTTI。

票数 6
EN

Stack Overflow用户

发布于 2009-10-16 13:42:42

您不能创建“type_info”对象的副本。但是,如果'typeid‘是一个Lvalue,那么结果就是相应的'type_info’对象,一旦获得,就会一直活到程序的末尾。出于这些原因,您可以安全地将指向“type_info”对象的指针存储在列表中。

票数 8
EN

Stack Overflow用户

发布于 2009-10-16 19:27:47

从您的评论到Cătălin Pitiș的回答,我知道您的目标是为不同的“页面”类型编写一个返回不同“样式”类型的函数。这必须是动态的吗?如果没有,像这样的东西会做你想做的事吗?

代码语言:javascript
复制
template<class PageT>
struct StyleOf;

template<>
struct StyleOf<PageA>{
    typedef StyleA type;
};

template<>
struct StyleOf<PageB>{
    typedef StyleB type;
};

// etc...

template<class PageT>
typename StyleOf<PageT>::type
GetStyle(const PageT&){
    return StyleOf<PageT>::type();
}

或者,用Boost.MPL

代码语言:javascript
复制
using boost::mpl::map;
using boost::mpl::pair;

typedef map<
    pair<PageA, StyleA>,
    pair<PageB, StyleB>,
    //etc.
>
PageToStyle;

从Page类型获取样式类型是:

代码语言:javascript
复制
boost::mpl::at<PageToStyle, Page>::type;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1577940

复制
相关文章

相似问题

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