c++ - 谷歌测试:带有模板的模板模板的笛卡尔积类型列表
问题描述
假设我有两个类接受每个模板参数:
template <typename T> class A { };
template <typename T> class B { };
我想为 , 和 , , 运行谷A<int>
歌测试,A<double>
即笛卡尔积x 。如何使用所有这些组合自动生成 google 测试对象?A<float>
B<int>
B<double>
B<float>
[A, B]
[int, double, float]
testing::Types
解决方案
您可以使用参数包做到这一点:
template <typename T> class A { public: void DoesBlah() { std::cout << "A:" << T(); } };
template <typename T> class B { public: void DoesBlah() { std::cout << "B:" << T(); } };
template <typename T>
class FooTest : public ::testing::Test {
};
template <typename T>
T& TestObj(T& o) {
o.DoesBlah();
return o;
}
template <typename... Ts>
void param_divider(Ts&... obj) {}
template <typename... Ts>
void foreachobj(Ts&... obj)
{
param_divider(TestObj(obj)...);
}
typedef ::testing::Types<int, double, float> MyTypes;
TYPED_TEST_CASE(FooTest, MyTypes);
TYPED_TEST(FooTest, Test) {
foreachobj(A<TypeParam>(), B<TypeParam>());
}
推荐阅读
- javascript - 谷歌地图使用 PHP、MySQL 显示错误的经度值
- c++ - 有没有办法用 AVX2 编写 _mm256_shldi_epi8(a,b,1) ?(向量之间每 8 位元素移位一位)
- file - 获取具有不同列数的两个文件中的公共行
- ios - Swift 时间戳只有 10 个字符?
- prolog - 根据复杂条件过滤列表列表
- javascript - 无法保存输入复选框的选中状态
- linux - cgo 从 amd64(linux) 交叉编译到 arm64(linux)
- excel - 如何创建 Excel 形状(折线)?
- azure - 机器人不再工作
- google-cloud-datastore - 有没有办法获取在一段时间内在 Google Datastore 上执行的查询列表……比如过去两天?