我有這個枚舉(類)需要從枚舉(類)映射到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