甲函數執行的代碼的某一塊兩次:爲CNT = 0和CNT = 1。目前我使用以下實現:C++內聯閉合類似物
int func {
int V1, V2, ... , Vn;
#define cnt 0
// a block of code: some operations with V1, ... , Vn
#undef cnt
#define cnt 1
// the same block of code
#undef cnt
}
此代碼是相當難看。使用內聯函數會導致更加醜陋的代碼:我需要通過引用將所有涉及的變量傳遞給函數。因此,我想創建一些封閉。
我不能使用類似
struct Nested {
__forceinline void block(const int cnt) {
// block of code
};
};
因爲V1,...,VN不應作靜態性能方面的原因。
我嘗試使用lambda函數,但Visual C++ 2013甚至內聯設置爲「任何適合(/ Ob2)」(即使是PGO)也無法內聯,並且這也傷害了性能。
有什麼建議嗎?
這有什麼錯了'for'循環? – yizzlez
你如何存儲lambda?你不使用'std :: function'嗎? – Yakk
For循環由於性能原因不能使用;此外,還有像var_0/var_1這樣的變量可以通過宏#define Var(cnt)((cnt == 0)?var ## _ 0:var ## _ 1)進行訪問。 – user2419798