0

使用 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));
}
4

1 回答 1

-1

简单地说,总是包括<gtest/gtest.h> after <boost/chrono.hpp> : 这样#define round ...就不会影响 boost 代码。

于 2017-02-11T21:52:17.073 回答