初始化并将map作为参数传递

时间:2014-08-04 14:35:39

标签: c++ c++11 googletest

我正在尝试按如下方式调用GoogleTest ASSERT_EQ宏:

ASSERT_EQ(map<string, string> {
  {"a", "x"}, {"b", "y"}
}, some_other_map);

但我似乎无法弄清楚正确的语法(如果它甚至可能)。

想法?

1 个答案:

答案 0 :(得分:1)

现在你已经澄清它是一个宏,而不是一个函数,问题是预处理器在语言方面是一个丑陋的疣,它自己的语法并不总是与它的语言兼容。

具体来说,它不会将<>识别为括号,因此它认为有三个以逗号分隔的参数,而不是两个:

map<string
string> {...}
some_other_map

您可以通过在第一个表达式周围加上括号来解决此问题:

ASSERT_EQ((map<string, string> {
    {"a", "x"}, {"b", "y"}
}), some_other_map);

一般情况下,尽量避免做任何复杂的宏。这通常是一种痛苦的途径。