다음에 의견을 보내 주셔서 감사합니다.포인터의 목록에 회원 기능이 있습니다
Class1 { debug(std::ostream&){} };
int main() {
std::vector<Class1*> list1;
// some work to do
}
대상 플랫폼 :
- 플랫폼 (1) 승 7x64, VS2010
- 플랫폼 (2) : 리눅스 X32, g ++ 4.4
Q : 다음 문장에 "std :: cout"을 전달하는 올바른 방법은 무엇입니까?
std::for_each(list1.begin(),
list1.end(),
"afunction(&Class1::debug, std::cout)");
내가 이전 디버그() 함수 내에서 "표준 : : cout을"을 사용하지만, 나중에 디버그 메시지의 출력을위한 유연성을 제공하는 것이 좋습니다.
편집 : 추가 정보 : 펑터 객체가 있다면, 여러 클래스에 대응하기 위해 펑터를 어떻게 구현해야합니까? (이들 클래스는 같은 "디버그"함수 서명을 제외하고는 아무 관계도 없습니다)?
편집 (2) : "std :: for_each"를 사용하면 각 클래스에 해당하는 소멸자를 직접 호출하여 list1의 모든 객체를 파괴 할 수 있습니까? (예를 들면의 for_each (l.begin(), l.end(), "클래스 :: ~ 클래스 1");
편집 (3) 제안 "PMR"당, 나는
std::for_each(l.begin(),
l.end(),
std::bind2nd(std::mem_fn(&Class1::debug), out));
과 같은 성명을 발표 이진 '< <'
그것은 컴파일 및 리눅스 플랫폼에서 제대로 실행하지만, VS2010에 실패, 코드는 클래스 1 : 디버그위한 VS 오류 MSG가
오류 C2678입니다
void Class1::debug(const std::ostream& out)
{
out << "some text" << someVar << "some text" << std::endl;
}
입니다 : 오퍼레이션 없음 'const std :: ostream'타입의 왼쪽 피연산자를 취하는 (또는 받아 들일 수있는 변환이 없음) 발견 된 ator가 발견되었습니다 (또는 받아 들일 수있는 변환이 없습니다)
어떤 큐가 있습니까?
[닫힌] 이제 내 클래스에 오버로드 된 연산자 < <이 구현되었으며 디버그 인쇄 기능이 사용되지 않습니다. 주어진 모든 힌트를 주셔서 대단히 감사드립니다.
나는 당신의 제안에 따라 몇 가지 점으로 컴파일하지만 MS VS2010에서 오류 "오류 C2678 : binary '<<'가 발생했습니다 : 'const std :: type'의 왼쪽 피연산자를 사용하는 연산자가 없습니다. ostream '(또는 받아 들일 수있는 변환이 없습니다) " –
예제 코드에서 연산자 <<를 볼 수 없습니다. 문제는 아마 당신이 출력하는 방식입니다. 'ostream'을'const &'로 대신'&'로 사용하십시오. 이것은 그것을 고쳐야한다. – pmr