我正在使用VS2008兼容代碼與Boost 1.60(沒有C++ 11)。我有一個第三方庫,它返回一個類似列表的界面。我想獲取列表中的元素並將它們放入std :: vector中。 track_list
類有一個next
方法,該方法返回指向軌道指針track**
的指針。如何修改一個綁定成員函數的結果爲std :: generate
我在想我可以使用std :: generate來填充一個與track_list
相同大小的向量。我能夠拿出boost::bind(&track_list::next, tracks)
這讓我track**
,但我不知道如何添加取消引用部分,以獲得track*
進入vector<track*>
。
此外,實際上有一個specific_track*
,我知道可以安全地從track*
投。所以我真正想要的是沿着(specific_track*)(*boost::bind(&track_list::next, tracks))
的方向,但我不確定如何構造它的語法。我在正確的軌道上嗎?我看了boost lambda,但生成器函數沒有參數。
編輯:也許一個更簡單的例子可能有助於澄清我正在嘗試做什麼。
int** get_ptr_num() { int* i = new int(5); return new int*(i); }
int* get_num() { return new int(5); }
int main() {
std::vector<int*> nums(10);
std::generate(nums.begin(), nums.end(), get_num) // compiles
std::generate(nums.begin(), nums.end(), get_ptr_num) // cannot convert from int** to int*
}
基本上我只是想包裝在某種約束或拉姆達的get_ptr_num做提領,而無需創建一個單獨的函數來進行。
第二部分,中投,將是這樣的:
int main() {
std::vector<double*> nums(10);
std::generate(nums.begin(), nums.end(), get_ptr_num) // cannot convert from int** to double*
}
這似乎將是微不足道的與C++ 11個lambda表達式做的,但我不能使用C++ 11
這個是一個成員函數的最後一部分會是這樣的東西更多:
class IntGenerator {
public:
int** get_ptr_num() { int* i = new int(5); return new int*(i); }
}
int main() {
IntGenerator int_gen;
std::vector<int*> nums(10);
std::generate(nums.begin(), nums.end(), boost::bind(&IntGenerator::get_ptr_num, int_gen)) // cannot convert from int** to int*
}
是您的目標是創建一個向量,或者是去探索積極使用標準庫技術?將一個列表的內容複製到一個向量中很簡單:只需對每個元素調用'push_back'即可。 –
我真的不清楚你想要做什麼。你有什麼代碼?它做什麼,你不想要。如果你正在尋找一個代碼審查,這些都是關於堆棧溢出的話題。另外,在同一個問題中問一堆半相關的問題並不好。最重要的是,我甚至不清楚這個問題與標題有關。 – xaxxon
對不起,我想這個問題很清楚。我如何使用Boost bind/lambdas來獲取std :: generate的生成器函數來獲取'track **'並將其轉換爲'specific_track *'? – Paul