我觉得这应该是显而易见的,但我想我今天才会成为现实。
如何让编译器给我一个东西的静态类型?
例如:
auto it = m_security_look_aside.find(strPath);
if (it == m_security_look_aside.end())
it = m_security_look_aside.insert(it, TYPE_OF(m_security_look_aside)::value_type(strPath, InternalIsLicensed(strPath)));
m_security_look_aside
是std::unordered_map<std::string, bool>
。
std::unordered_map<std::string, bool>
有一个value_type
typedef。
我可以使用std::unordered_map<std::string, bool>::value_type(key,value)
构建一个属于这个无序地图的对。但是,如何从实例转到静态类型?
答案 0 :(得分:1)
使用decltype(m_security_look_aside)::value_type
- 即decltype(m_security_look_aside)
可用于表示实例变量的类型。
但你真的不需要这里。相反,你可以做
it = m_security_look_aside.emplace_hint(it, strPath, InternalIsLicensed(strPath));
使用参数(在初始“提示”迭代器之后)作为value_type
的构造函数参数,使用“value_type
对象”(使用就地构造)“