我有一些代碼,可以大大的複雜性,通過使用lambda表達式減少。然而不幸的是,我們必須使用不完全支持C++ 11的編譯器,我們不能輕鬆切換。現在的問題是如何保持邏輯儘可能接近與不可用的功能的λ表達(即std::function
是可用的,lambda表達式都沒有)。如何處理lambda表達式在拉姆達預編譯
通常的解決辦法是在其他地方定義函子,然後在適當的地方使用它:
struct functor{
functor(type & member) : m_member(member) {}
void operator()(...) {...}
type & m_member;
};
void function() {
use_functor(functor(...));
}
我非常習慣這種模式,雖然我不喜歡它了很多。不定義類的主要原因通常是我將在STL中使用函數,而模板不喜歡函數內聯定義的結構。然而,在我的情況下use_functor()
功能將是一個通常的方法,所以可以定義函數本身內部的算符(各函子只有一個函數內使用)。
void function() {
struct functor{
functor(type & member) : m_member(member) {}
void operator()(...) {...}
type & m_member;
};
use_functor(functor(...));
}
這似乎有所改善,但仍需要更多的醜陋的代碼,我想。例如,我想徹底擺脫函子的名稱。我知道有可能創建一個匿名結構,如果我只使用一個值。
void function() {
struct{
// functor(type member) : m_member(member) {}
void operator()(...) {...}
// type & m_member;
} callback ;
use_functor(callback);
}
但是在這一點上我不知道如何提供必要的數據成員。由於結構是匿名的,它沒有構造函數。我可以很容易地設置該成員,因爲它是公開的,但是這又會增加一條我不喜歡的線。
的目標是把它的狀態下,儘可能少地需要被改變,一旦我們切換到具有清潔lambda表達式,這將允許完全消除這一問題的編譯器。
你怎麼會去這樣做呢?
當我剛發現,一些老的GCC的甚至不處理來自嵌套函數到std ::功能<>很好的結構轉換,而不會像任何的解決方案。所以我不得不使用選項一併分開邏輯。 – LiKao