如何将 TEMPLATE_TEST_CASE 与类型对一起使用?

How to use TEMPLATE_TEST_CASE with pairs of types?

我正在尝试将 catch2 TEMPLATE_TEST_CASE 用于类型对,即我需要使用一对相关的类型,而不是为每个测试模板化一个类型。我以为我可以使用 std::variant 来存储这些对,但编译失败:error: expected primary-expression before ‘)’ token. auto outtype = std::get<0>(TestType);.

对于此错误的原因或此问题的替代解决方案,我将不胜感激。 这是代码片段:

    using varA = std::variant<OutputA, InputA>;
    using varB = std::variant<OutputB, InputB>;

    TEMPLATE_TEST_CASE("test", "[test][template]", varA, varB) {
    auto outtype = std::get<0>(TestType);
    auto intype  = std::get<1>(TestType);
    }

. instead of templating a single type for each test, I need to use a correlated pair of types.

如果只是一对类型,我想你可以使用std::pairstd::tuple,更多类型。

我想你可以试试

TEMPLATE_TEST_CASE("test", "[test][template]", std::pair<OutputA, InputA>, std::pair<OutputB, InputB>) {
  typename TestType::first_type outvalue = /* some initial value */;
  typename TestType::second_type invalue = /* some initial value */;
}

使用std::tuple,访问单一类型,可以使用std::tuple_element,所以

TEMPLATE_TEST_CASE("test", "[test][template]", std::tuple<OutputA, InputA>, std::tuple<OutputB, InputB>) {
  std::tuple_element_t<0u, TestType> outvalue = /* some initial value */;
  std::tuple_element_t<1u, TestType> invalue = /* some initial value */;
}