从成员初始化列表中调用一个普通的void函数?
问题描述:
我在这里有一个时髦的问题。我使用一些简单的定时器对对象创建进行基准测试我的代码库正在逐渐摆脱原型而成为更完整的框架。这需要在顶层初始化一些简单的结构(主要的)。这意味着我无法找到一种基准对象初始化的方法,这是至关重要的。从成员初始化列表中调用一个普通的void函数?
在一个理想的世界,我可以做线沿线的东西:
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;
};
不错!谢谢。我也发现这很有趣http://stackoverflow.com/questions/17375114/c-temporary-variables-in-initilization-list。两者的混合应该可以做到我相信的诀窍,通过某种定义来改变行为。美好的一天:) – scx
私人继承也可能是有用的(在继承基准的情况下)。 – Jarod42