从成员初始化列表中调用普通的 void 函数?
Call a plain void function from member initialization list?
我这里有一个时髦的问题。我使用一些简单的计时器对对象创建进行基准测试。我的代码库正慢慢从一个原型转变为一个完整的框架。这需要在顶层(在 main 之外)初始化一些简单的结构。这意味着我找不到对对象初始化进行基准测试的方法,这很关键。
在理想世界中,我可以按照以下方式做一些事情:
struct Potato {
Potato()
: benchmark::start()
, some_int(42)
{
/* Some more stuffs */
benchmark::stop();
}
int some_int;
};
你明白了,我想对成员初始值设定项列表进行基准测试。有没有人知道如何处理整个软件中的全局(静态)对象?我正在尝试使用 constexpr 函数但无济于事。从简单函数返回对象集合时,我也遇到了一些复制构造函数问题(来自 make_tuple)。
感谢任何提示,谢谢。
只需为您的基准创建一个包装器结构,使其构造函数仅调用 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;
};
我这里有一个时髦的问题。我使用一些简单的计时器对对象创建进行基准测试。我的代码库正慢慢从一个原型转变为一个完整的框架。这需要在顶层(在 main 之外)初始化一些简单的结构。这意味着我找不到对对象初始化进行基准测试的方法,这很关键。
在理想世界中,我可以按照以下方式做一些事情:
struct Potato {
Potato()
: benchmark::start()
, some_int(42)
{
/* Some more stuffs */
benchmark::stop();
}
int some_int;
};
你明白了,我想对成员初始值设定项列表进行基准测试。有没有人知道如何处理整个软件中的全局(静态)对象?我正在尝试使用 constexpr 函数但无济于事。从简单函数返回对象集合时,我也遇到了一些复制构造函数问题(来自 make_tuple)。
感谢任何提示,谢谢。
只需为您的基准创建一个包装器结构,使其构造函数仅调用 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;
};