ClassA & operator << (ClassA &, int32_t)
{
...
}
class ClassMain
{
public:
insert(ClassA & c) const;
...
private:
std::set<int> m_setContainer;
};
struct InsertOpt : binary_function<ClassA, int, ClassA&>
{
ClassA & operator()(ClassA & c, int val) const
{
c << val;
return c;
}
};
void ClassMain::insert(ClassA & c) const
{
// Case I: the for loop works
for (std::set<int>::const_iterator iter = m_setContainer.begin();
iter != m_setContainer.end(); ++iter)
{
c << *iter; // operator<<(c, *iter);
}
// Case II: doesn't work
for_each(m_setContainer.begin(), m_setContainer.end(), bind1st(InsertOpt(), c));
}
Error:
../include/c++/4.1.2/bits/stl_function.h:406: error: no match for call to '(const InsertOpt) (const ClassA&, const int&)'
note: candidates are: ClassA& InsertOpt::operator()(ClassA&, int32_t) const
問題>爲什麼編譯器查找(const ClassA&, const int&)
,而不是ClassA & operator()(ClassA & c, int val) const
?使用bind1st在常量memeber功能
謝謝
不應該是'binary_function'? –
cdhowie
2014-11-21 17:31:05
In effective STL,Item 40. Make functor classes adaptable,「一般來說,傳遞給unary_function或binary_function的非指針類型會刪除const和引用。」 – q0987 2014-11-21 17:34:32
要麼是不正確的,要麼是你誤解了它。僅僅因爲你將它傳遞給一個仿函數,沒有魔法允許你將const對象作爲非const引用參數傳遞。 – cdhowie 2014-11-21 17:43:05