从成员初始化列表中调用一个普通的void函数?

时间:2017-04-16 18:44:04

标签: c++ initialization initializer-list object-initializers

我这里有一个时髦的问题。我用几个简单的计时器对对象创建进行基准测试。我的代码库正逐渐远离成为原型和更多完整框架。这需要在顶层(out of main)初始化一些简单的结构。这意味着我找不到对对象初始化进行基准测试的方法,这是至关重要的。

在一个理想的世界里,我可以做一些事情:

struct Potato {
    Potato()
        : benchmark::start()
        , some_int(42)
    {
        /* Some more stuffs */

        benchmark::stop();
    }

    int some_int;
};

您明白了,我希望对成员初始化列表进行基准测试。有没有人知道如何使用整个软件中的全局(静态)对象?我正在尝试使用constexpr功能无济于事。从简单函数返回对象集合时,我也会遇到一些复制构造函数问题(来自make_tuple)。

感谢任何提示,谢谢。

1 个答案:

答案 0 :(得分:1)

只需为您的基准创建一个包装结构,使其构造函数只调用benchmark::start(),然后您将在Patato的构造函数体中手动停止它。但是你需要确保包装器实例是Patato中的第一个对象(这将利用C ++的成员初始化顺序)。插图:

struct Benchmarker{
    Benchmarker(){ benchmark::start(); }
};

struct Potato {
    Potato()
        :  //Benchmark's ctor will be implicitly called first
           some_int(42)
    {
        benchmark::stop();
    }

    Benchmarker benchmark;    //NOTE: Make sure its the first
    int some_int;
};