1

我想修改模板化的谷歌基准(带有自定义参数)以使用测试夹具类运行,但不知道这是否真的可行,如果可以,正确的语法如何。

仅仅添加夹具类似乎是不够的。

static void CustomArguments(benchmark::internal::Benchmark* b) {
    // define I, J
    for (auto i : I)
    {
        for (auto j : J)
            b->Args({i, j});
    }
}

template<typename my_type>
class My_Fixture : public benchmark::Fixture
{
protected:
    void SetUp(const ::benchmark::State& state) { ...}

    virtual void TearDown() { ...}
};

template <typename any_type>
static void insert(benchmark::State& state)
{
    for (auto _ : state)
    { ...}
}

BENCHMARK_TEMPLATE_F(My_Fixture, insert, my_type)->Apply(CustomArguments);

BENCHMARK_MAIN();

编译器抱怨 before-last 代码行 error: expected initializer before '->' token,但也无法从测试中的夹具中找到变量声明。这可能是结果或附加错误。我需要另外注册灯具吗?该示例在没有固定装置的情况下完美运行。

4

1 回答 1

1

您需要使用稍微不方便的注册宏:

BENCHMARK_TEMPLATE_DEFINE_F用夹具定义模板化基准。然后BENCHMARK_REGISTER_F可用于注册基准,这就是您要添加->Apply(CustomArguments)调用的地方。

有关示例,请参见此处。

于 2019-05-06T18:56:02.570 回答