【问题标题】:How to compare values with templates and boost in C++?如何在 C++ 中将值与模板进行比较并提升?
【发布时间】:2019-05-02 12:44:19
【问题描述】:

我创建了一个模板函数,可以在其中放置每种类型。现在,这个功能确实必须始终工作。如果类型 T 是 int,则 int 总是从函数中出来。如果一个字符串进来,一个字符串出来。

现在我刚刚查看了 boost 文档。 Boost 表示我必须使用 BOOST_AUTO_TEST_CASE_TEMPLATE。

假设我有以下情况:

BOOST_AUTO_TEST_SUITE (MyTestSuite)

typedef boost :: mpl :: list <int, long, short, double, float, std :: string> TestTypes;

BOOST_AUTO_TEST_CASE_TEMPLATE (MyTestCase, T, TestTypes)
{
  // These three values ​​will be separated by ',' and can be accessed seprately thanks to their individual getters.
  std :: string input = "5,6,7";
  Myclass <T> myClass (input);

BOOST_TEST (myClass.getFirst() == 5);
BOOST_TEST (myClass.getSecond() == 6);
BOOST_TEST (myClass.getThird() == 7);
}

BOOST_AUTO_TEST_SUITE_END()

如您所见,我不想检查我返回的是否是正确的类型,而是我返回的值是否与我给出的值相同。因此,如果我给出 5 并且类型为 double,那么我的班级将其设为 5.00。我的支票目前不这样做。如何确保我要检查的号码始终与我提供的类型相同?听起来可能有点困难,但如果您想了解更多信息,我会编辑此消息。

假设这有效。然后我想使用该类型的最小值和最大值作为输入。我怎么做?如何获得 T 的最小值和最大值?

【问题讨论】:

    标签: c++ unit-testing templates boost


    【解决方案1】:

    您可以使用decltype 和 stl 特征:

    BOOST_CHECK(std::is_same<T, decltype(myClass.getFirst())>::value);
    

    然后我想使用该类型的最小值和最大值作为输入。我该怎么做?

    使用std::numeric_limits

    【讨论】:

    • 只是想尝试一下,但出现错误。 "'decltype' 之前的预期主表达式。
    • 我需要使用 BOOST_CHECK 而不是 BOOST_TEST 呵呵 :)
    • 不熟悉boost测试框架,根据您的反馈修复:-)
    猜你喜欢
    • 2015-05-05
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    相关资源
    最近更新 更多