2010-08-29 50 views
2

我想使用Boost Phoenix生成一個lambda函數,用於包含引用類型成員的結構的std :: find_if操作。一個人爲的例子如下:Boost Phoenix:綁定到參考結構的成員?

struct MyStruct 
{ 
    MyStruct() : x(0) {} 
    int& x; 
    }; 

std::vector<MyStruct> AllStructs; 

// Search the array for an element for which x == 5 
const std::vector<MyStruct>::const_iterator& it = 
    find_if(
    AllStructs.begin(), 
    AllStructs.end(), 
    bind(&MyStruct::x, arg1) == 5 
); 

如果MYSTRUCT :: x是int類型,而不是INT &的,它編譯罰款。但是對於引用成員,我得到一個「指向引用成員的指針是非法的」錯誤。

從網上看來,似乎我需要使用Phoenix的'ref'功能,但我似乎無法弄清楚所需的語法。

有沒有人知道如何得到這個'int &'類型的工作?

回答

3

對不起,這是爲時已晚,但對於未來的參考,你可以使用一個成員指針:

std::vector<MyStruct>::const_iterator it = 
    find_if(AllStructs.begin(), AllStructs.end(), 
     (&boost::phoenix::arg_names::arg1)->*&MyStruct::x == 5 
    );