class A {}
A a;
type_info info = typeid (a); // error type_info is private我想要一个列表list<type_info>来存储类的类型。有解决办法吗?
发布于 2009-10-16 13:09:02
不能直接实例化type_info类的对象,因为该类只有一个私有副本构造函数。因为列表需要复制构造函数..。
如果您真的需要它,请使用std::list< type_info*>。
我不知道你为什么需要这个列表,但我会考虑一个替代设计,如果可能的话,不涉及RTTI。
发布于 2009-10-16 13:42:42
您不能创建“type_info”对象的副本。但是,如果'typeid‘是一个Lvalue,那么结果就是相应的'type_info’对象,一旦获得,就会一直活到程序的末尾。出于这些原因,您可以安全地将指向“type_info”对象的指针存储在列表中。
发布于 2009-10-16 19:27:47
从您的评论到Cătălin Pitiș的回答,我知道您的目标是为不同的“页面”类型编写一个返回不同“样式”类型的函数。这必须是动态的吗?如果没有,像这样的东西会做你想做的事吗?
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
using boost::mpl::map;
using boost::mpl::pair;
typedef map<
pair<PageA, StyleA>,
pair<PageB, StyleB>,
//etc.
>
PageToStyle;从Page类型获取样式类型是:
boost::mpl::at<PageToStyle, Page>::type;https://stackoverflow.com/questions/1577940
复制相似问题