를 사용하여 :: 두 번째 쌍 구성원에 따라 소트 :: bind은 내가 다음을 사용할 수 있습니다 알고 바인드
4
A
답변
3
다음 중 어떨까요? boost :: function을 사용하여 비교기의 실제 유형을 지 웁니다. 비교기는 boost : bind 자체를 사용하여 생성됩니다.
typedef std::pair<int, int> IntPair;
typedef boost::function<bool (const IntPair &, const IntPair &)> Comparator;
Comparator c = boost::bind(&IntPair::second, _1) < boost::bind(&IntPair::second, _2);
std::set<IntPair, Comparator> s(c);
s.insert(IntPair(5,6));
s.insert(IntPair(3,4));
s.insert(IntPair(1,2));
BOOST_FOREACH(IntPair const & p, s)
{
std::cout << p.second;
}
0
문제는 - 코드를 템플릿으로 작성하거나 C++ 0x 기능을 사용하지 않는 한 boost :: bind 표현식의 이름을 지정해야한다는 것입니다. 그러나 이러한 유형의 이름은 대개 매우 복잡합니다. C++ 98
템플릿 인수 공제 : C에서 자동차와 decltype으로
template<class Fun>
void main_main(Fun fun) {
set<pair<int,long>,Fun> s (fun);
…
}
int main() {
main_main(…boost::bind(…)…);
}
+ +0 :
실제 바인드 표현으로int main() {
auto fun = …boost::bind(…)…;
set<pair<int,long>,decltype(fun)> s (fun);
main_main(boost::bind(…));
}
, 나는 이런 식으로 뭔가 생각 :
typedef std::pair<int,long> pil;
boost::bind(&pil::second,_1) < boost::bind(&pil::second,_2)
(안된)
std :: set < > 접근 방식이 부적절한 주소를 지정하는 boost :: bind를 사용하여 해결하려는 문제점은 무엇입니까? – andand