2011-04-08 57 views
1

以下代碼顯示使用boost :: bind時,通過引用傳遞的參數會被複制。有沒有辦法阻止複製,而不是訴諸指針(我目前使用的是解決方法)? (用gcc 4.4.3測試)boost :: bind可以在不復制的情況下與引用一起使用嗎?

#include <iostream> 
#include <boost/function.hpp> 
#include <boost/bind.hpp> 

void function1(int& x) 
{ 
    std::cout << "function1 &x: " << &x << std::endl; 
} 

int main() 
{ 
    int y = 0; 
    std::cout << "main &y: " << &y << std::endl; 

    boost::function<void()> f = boost::bind(function1, y); 
    f(); 
} 
+0

對於必須在'bind'(或類似參數列表)中使用的任何函數,我只使用指針。它可以防止通常很難調試的意外複製。 – 2011-04-08 12:53:45

回答

7

你應該使用boost :: ref來傳遞引用來提升綁定。

boost::function<void()> f = boost::bind(function1, boost::ref(y)); 
+0

謝謝,這有助於。不幸的是,這些東西總是比預期的難... – stefaanv 2011-04-08 12:16:50

+0

我剛纔意識到我不能使用這個,因爲我已經將模板函數中的綁定,我不知道該參數是一個參考。啊,我會用指針。 – stefaanv 2011-04-08 12:19:44

+0

stefaanv:我只能回答你在我的問題中看到的 – 2011-04-08 12:21:19

相關問題