我有这个枚举(类)需要从枚举(类)映射到std :: binary_function
enum class conditional_operator
{
plus_op,
or_op,
not_op
}
而且我想一个std::map
表示这些映射:
std::map<conditional_operator, std::binary_function<bool,bool,bool>> conditional_map =
{ { conditional_operator::plus_op, std::logical_and<bool> },
{ conditional_operator::or_op, std::logical_or<bool>},
{ conditional_operator::not_op, std::binary_negate<bool>} // this seems fishy too, binary_negate is not really what I want :(
除了从这个不编译的事实:
error: expected primary-expression before '}' token
error: expected primary-expression before '}' token
error: expected primary-expression before '}' token
对于这三行中的每一行,我该怎么做?我认为logical_not与第二个虚拟参数将工作,一旦我得到这个编译当然...
编辑:我可以使用lambda的这个?
也许'!(a && b)'? :| – Xeo 2011-06-06 14:40:27
是的,我知道,但我希望它在这张地图中统一,所以我不必去寻找别的东西,也许'[](bool a,bool){return!a; }'?并且不会像“logical_and”和“logical_or”这样的现有模板是“更好”的,因为我没有写它们(例如,当它提供你需要的时候使用它)。当然'not_op'会成为一个问题。 (还要注意[你的代码不合格](http://stackoverflow.com/questions/6253351/cant-use-not-or-or-or-plus-as-identifier)) – rubenvb 2011-06-06 14:40:31
@rubenvb:那么你的 - 我从你的例子中复制它。我赞成在这种函数对象上使用lambda,因为如果你问我,代码是内联的并且更容易改变。 – Puppy 2011-06-06 14:48:05