【问题标题】:decltype for map value type?地图值类型的decltype?
【发布时间】:2012-04-24 14:15:56
【问题描述】:

这在 c++11 中是否合法:

std::unordered_map<X, Y> xy_map;
X my_x;
Y my_y;
xy_map.insert(decltype(xy_map)::value_type(my_x, my_y));

我在 gcc 4.6.3 中尝试过,但没有成功。 GCC 抱怨:

expected primary-expression before 'decltype'

我希望不要这样做:

typedef std::unordered_map<X, Y> MyMap;
xy_map.insert(MyMap::value_type(my_x, my_y));

我猜 c++11 并没有解决这个问题或让它变得更容易。

【问题讨论】:

标签: c++ gcc c++11


【解决方案1】:

代码是正确的 C++。就像 Basile 在评论中提到的那样,这是针对 GCC 4.7 修复的错误。

【讨论】:

    【解决方案2】:

    这并不能回答您的问题,但它确实具有可能在您的编译器上工作的优点:

    xy_map.emplace(my_x, my_y);
    

    That will construct the value type from the given arguments. 第一个参数构造键,其他参数用于值。这将有效地构建std::pair。所以不需要像decltype 这样的丑陋的东西。

    【讨论】:

    • emplace 会很棒,但它也不适用于 gcc 4.6.3。 :(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多