vector<string> vStr, vBox;
vStr에는 문장들이 들어있습니다. 이들 문장의 앞뒤로 * 를 추가하여 vBox에 "* 문장 * " 을 넣으려고 합니다.
class addBox : public binary_function < string, int ,string>
{
public :
string operator()(string str,int nMaxLen) {
str = "* " + str + string(nMaxLen - str.size(),' ') + " *";
return str;
}
};
void BlackBox::makeBox()
{
int nMaxLen;
vector<string>::const_iterator vItr;
vItr = max_element(vStr.begin(),vStr.end(),lengthless);
nMaxLen = (*vItr).size();
string first(nMaxLen+4,'*');
string second = "* " + string(nMaxLen,' ') + " *";
vBox.reserve(vStr.size());
transform(vStr.begin(),vStr.end(),vBox.begin(),bind2nd(addBox(),nMaxLen));
}
이처럼 했으나 warning 이 뜨고 있습니다. 무슨 경고인지 잘 모르겠고 이점에 대해 알고 싶습니다.
Warning W8037 C:\Borland\BCC55\include\function.h 330: Non-const function addBox::operator ()(string,int) called for const object in function binder2nd<addBox>::operator ()(const string &) const
또, 위 소스가 잘못되있다면 지적해주세요.
두시간 동안 해결해 볼려고 책을 뒤적이며 검색해보고 해보며 여기 까지 왔네요... 첨엔 에러 투성이었는데 경고 수준으로 흑 감격..
bind2nd 는 무조건 두개의 인자중 한개를 고정 시킨다는 정도만 알고 사용했는데 에러가 왕창...
검색하다보니... bind2nd 는 이항함수 객체.. binary_function 을 이용한 것에 대해서 동작을 하는거 같더군요... 맞나요?
addBox가 두개의 인자를 가지는 함수는 안되는 건가요?
transform 구문이 제대로 동작하지 않네요 vBox 에 정보가 들어오지 않네요... 잘못 사용했다는 것인데
어떻게 사용해야 하는지....
|