두 개의 인수를 사용하여 문자열을 반환하는 함수 포인터가 필요합니다.인수를 바인드하는 functor를 만드는 방법이 무엇입니까
하나의 인수를 사용하는 함수를 래핑하고 해당 문자열을 반환하는 어댑터를 전달하고 싶습니다 (즉 인수 중 하나를 버립니다).
나는 2 개의 인수를 취하고, 하나의 인수 만 전달하는 랩핑 된 함수를 호출하는 자체 어댑터를 간단히 빌드 할 수 있습니다.
그러나 나는 C++/boost에서 그렇게 쉬운 방법이 있다면 훨씬 더 간단한 방법으로 어댑터를 만들 수 있을까요?
여기이 좀 더 구체적인하기 위해 몇 가지 세부 사항을이다 :
typedef boost::function<CString (int,int)> TooltipTextFn;
class MyCtrl
{
public:
MyCtrl(TooltipTextFn callback = boost::bind(&MyCtrl::GetCellText, this, _1, _2)) : m_callback(callback) { }
// QUESTION: how to trivially wrapper GetRowText to conform to TooltipTextFn by just discarding _2 ?!
void UseRowText() { m_callback = boost::bind(&MyCtrl::GetRowText, this, _1, ??); }
private:
CString GetCellText(int row, int column);
CString GetRowText(int row);
TooltipTextFn m_callback;
}
을 분명히, 나는 두 개의 인수를 취할 GetRowText 적응 멤버를 공급하는 유일한 자체) (GetRowText에 처음 통과 할 수 있습니다.
하지만 이미 내가 할 수있는 부스트 바인더/어댑터가 있습니까?
VS2008 SP 1은이 코드에서 불평합니다. 나는 boost :: bind가 (적어도 첫 번째 예제에서 필자가 필요로하는) 1 개의 인수를 취하는 functor를 생성하고 있다고 생각합니다. 바인드가 하나의 인수 만 사용하는 동안 TooltipTextFn과 일치하는 함수 서명을 생성하도록 강제하는 방법이 있다면 ... – Mordachai
나는이 문제에 부딪치지 않는 것 같습니다. 나는 g ++에서 일하고 있으며 VS에 즉시 액세스 할 수있는 권한이 없습니다. 다른 제안으로, 생성자의 기본 매개 변수에있는'this' 포인터입니까? – tJener
당신 말이 맞아요. 문제는 삼항 조건부가 X를 컴파일하지 않는다는 것입니다. Y : Z. 그러나 내가 명시 적으로 X = Y; 그러면 상황은 좋았습니다. 감사. :) – Mordachai