0

我正在尝试将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);
    }
4

1 回答 1

1

. 我需要使用一对相关的类型,而不是为每个测试模板化一个类型。

如果只是一对类型,我想你可以使用std::pair; std::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 */;
}
于 2021-03-16T16:00:20.113 回答