使用 boost 模板函数解决冲突的宏名称的最佳方法是什么?包含 boost/chrono.hpp 后,我得到了编译器错误:
CCN5816 (W) 为宏“round”指定了太多参数。额外的参数被忽略。“/usr/include/math.h”,第 2133.16 行:CCN5425 (I) “round”在“/usr/include/math.h”的第 2133 行定义。
round
与模板函数冲突boost::chrono::round
。
/usr/include/math.h
#define round(x) __round(x)
/boost/chrono/round.hpp
namespace boost
{
namespace chrono
{
/**
* rounds to nearest, to even on tie
*/
template <class To, class Rep, class Period>
To round(const duration<Rep, Period>& d)
{
#undef
如果我修补round.hpp ,我似乎可以使用宏- 也许我可以使用parantheses?在宏和成员函数冲突的答案中,函数名称在括号内,但这是在函数的使用中,而不是在其定义中。它也适用于定义吗?
BoostChronoTest.cpp
#include <gtest/gtest.h>
#include <boost/chrono.hpp>
TEST(BoostChronoTest, simpleTests) {
boost::chrono::nanoseconds ns(12000);
// conversion with precision loss requires a cast
boost::chrono::microseconds ms = boost::chrono::duration_cast<boost::chrono::microseconds>(ns);
// no precision loss
boost::chrono::nanoseconds ns2 = ms;
ms++;
ms += boost::chrono::duration_cast<boost::chrono::microseconds>(ns);
ns *= 2;
EXPECT_TRUE(ms > ns);
EXPECT_EQ(ms, boost::chrono::microseconds(25));
EXPECT_EQ(ns, boost::chrono::nanoseconds(24000));
EXPECT_EQ(ns2, boost::chrono::microseconds(12));
EXPECT_EQ(ns2, boost::chrono::nanoseconds(12000));
}