2017-04-16 62 views
0

我在這裏有一個時髦的問題。我使用一些簡單的定時器對對象創建進行基準測試我的代碼庫正在逐漸擺脫原型而成爲更完整的框架。這需要在頂層初始化一些簡單的結構(主要的)。這意味着我無法找到一種基準對象初始化的方法,這是至關重要的。從成員初始化列表中調用一個普通的void函數?

在一個理想的世界,我可以做線沿線的東西:

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

     benchmark::stop(); 
    } 

    int some_int; 
}; 

你的想法,我想基準成員初始化列表。有沒有人有關於如何在整個軟件中使用全局(靜態)對象的提示?我正在嘗試使用constexpr函數無濟於事。從簡單函數返回對象集合時,我也得到了一些拷貝構造函數問題(來自make_tuple)。

任何提示讚賞,謝謝。

回答

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; 
}; 
+0

不錯!謝謝。我也發現這很有趣http://stackoverflow.com/questions/17375114/c-temporary-variables-in-initilization-list。兩者的混合應該可以做到我相信的訣竅,通過某種定義來改變行爲。美好的一天:) – scx

+1

私人繼承也可能是有用的(在繼承基準的情況下)。 – Jarod42

相關問題