【发布时间】:2016-07-28 09:47:11
【问题描述】:
我有以下代码:
enum RelationalOperator { LT, LTE, EQ, GTE, GT };
std::map<RelationalOperator, bool (*)(const Point&, const Point&)> ops = {
{ GTE, [](const Point& a, const Point& b) { return a >= b; } },
{ LTE, [](const Point& a, const Point& b) { return a <= b; } },
{ EQ, [](const Point& a, const Point& b) { return a == b; } },
{ GT, [](const Point& a, const Point& b) { return a > b; } },
{ LT, [](const Point& a, const Point& b) { return a < b; } },
};
此代码在模板内,Point 是模板参数。
我试图用auto 替换变量ops 的类型,但Clang++ 说:
src/utils.hpp:47:10: error: cannot deduce actual type for variable 'ops' with type 'auto' from initializer list
这是为什么呢?我认为关键字auto 是针对这类情况,类型较长且相当明显。
【问题讨论】:
-
您想要
map而不是multimap或结构数组,这并不明显。 -
请提供mcve 以获取导致问题的实际代码。
-
@BoPersson 糟糕,我没有考虑到其他对象可能具有相同的初始化列表!