템플릿 클래스를 사용하여 변환 할 수없는 이유를 찾는 데 어려움을 겪고 있습니다.템플릿을 사용하여 std :: transform을 사용하는 방법
여기에 단순화 된 템플릿 클래스의 버전입니다 :
template<typename T>
class base
{
public :
base() : all_() {}
~base() {}
public:
bool add(T t)
{
typename vector<T>::iterator itr
= lower_bound(all_.begin(), all_.end(), t);
if (itr == all_.end() || *itr != t)
{
all_.push_back(t);
cout << "ok" << endl;
return true;
}
cout << "failed" << endl;
return false;
}
static bool addTo(base<T> *c, T t)
{
return c->add(t);
}
private :
vector<T> all_;
};
그리고 이것은 내가 추가 멤버 함수의 모든 부울 출력을 캡처 변환을 사용하려고 시도하고있는 곳입니다 :
main()
{
base<int> test;
vector<bool> results;
vector<int> toAdd;
toAdd.push_back(10);
toAdd.push_back(11);
toAdd.push_back(10);
transform(toAdd.begin(), toAdd.end(),
back_inserter(results),
bind1st((bool(*)(base<int>*,int))base<int>::addTo, &test));
}
base :: add 또는 base :: addTo를 사용하여 toAdd 컨테이너의 각 멤버를 삽입하고 벡터 결과에 부울 결과를 캡처하는 것입니다.
질문 무엇입니까? "왜이 코드가 컴파일되지 않는가"라면 C++의 함수 정의는 리턴 타입을 가져야하고'main'은 리턴 타입이'int'입니다 ;-) –
무엇을 달성하려고하는지 설명 할 수 있습니까? 변환? – Naveen
수정 - 컴파일 할 수 없습니다. 모든 타입의 main을주는 것은 모든 컴파일러의 전제 조건이 아닙니다. – youngthing