C++ 一个人能得到一个对象的静态类型吗?

C++ 一个人能得到一个对象的静态类型吗?,c++,templates,type-conversion,std,C++,Templates,Type Conversion,Std,我觉得这应该是显而易见的,但我想我今天是瘦了 我如何让编译器给我一个东西的静态类型 例: m_security_look_aside是一个std::unordered_map。 std::无序映射有一个value\u类型typedef 我可以使用std::unordered\u map::value\u type(key,value)来构造一个属于这个无序映射的对。但是如何从实例转换到它的静态类型呢?使用decltype(m\u security\u look\u旁白)::value\u typ

我觉得这应该是显而易见的,但我想我今天是瘦了

我如何让编译器给我一个东西的静态类型

例:

m_security_look_aside
是一个
std::unordered_map
std::无序映射
有一个
value\u类型
typedef

我可以使用
std::unordered\u map::value\u type(key,value)
来构造一个属于这个无序映射的对。但是如何从实例转换到它的静态类型呢?

使用
decltype(m\u security\u look\u旁白)::value\u type
-即
decltype(m\u security\u look\u旁白)
可以用来表示实例变量的类型

但你在这里真的不需要。相反,你可以这样做

it = m_security_look_aside.emplace_hint(it, strPath, InternalIsLicensed(strPath));

这将使用参数(在初始“提示”迭代器之后)作为
value\u-type
的构造函数参数来“就位”(就地构造)一个适当
value\u-type
的对象,恐怕您不能直接在这里使用
decltype
表达式。您必须
typedef
decltype(m_security_look_aside)
然后使用别名。为什么我不能在这里直接使用decltype说明符?我不知道有这样的规则。emplace_hint()非常适合我的需要,但我无法让decltype(m_security_look_放在一边)::value_type工作。编译器(VS 2012 SP1)抱怨::value_type不是全局命名空间的成员?!它是否按照Gorpik的建议工作,即
typedef decltype(m_security_look_aside)map_type;//现在使用映射类型::值类型
?并非所有的编译器都实现了所有的C++11。也许VC++还不支持decltype()。从我对标准的阅读来看,它应该像我描述的那样工作,并且由ideone online编译。@JoergB对此我不是很确定。您可能知道,
decltype
可以根据使用情况返回不同的内容。对我来说,阅读标准并没有完全澄清问题。无论如何,我试着使用VS(与Mordechai相同),它只在我打字时起作用,因此我发表了评论。
it = m_security_look_aside.emplace_hint(it, strPath, InternalIsLicensed(strPath));