Спасибо за комментарии к следующим.
Class1 { debug(std::ostream&){} };
int main() {
std::vector<Class1*> list1;
// some work to do
}
Целевая платформа:
- Платформа (1): Win 7x64, VS2010
- Платформа (2): Linux x32, g ++ 4.4
В: Каким должен быть правильный способ передачи "std :: cout" в следующем выражении?
std::for_each(list1.begin(),
list1.end(),
"afunction(&Class1::debug, std::cout)");
Ранее я использовал "std :: cout" внутри функции debug (), но позже рассмотрим возможность предоставления гибкости для вывода сообщения отладки.
Редактировать: Дополнительная информация: если нужно использовать объекты функтора, как мне реализовать функтор для работы с несколькими классами (эти классы не имеют отношения, за исключением одной и той же сигнатуры функции «отладка»)?
Edit (2): Используя "std :: for_each", возможно ли уничтожить все объекты в списке list1, вызвав соответствующий деструктор для каждого класса напрямую? (например, for_each (l.begin (), l.end (), "Class :: ~ Class1");
Редактировать (3): Согласно предложенному "pmr", я делаю заявление как
std::for_each(l.begin(),
l.end(),
std::bind2nd(std::mem_fn(&Class1::debug), out) );
Он компилируется и работает правильно на платформе Linux, но не работает на VS2010, код для Class1 :: debug -
void Class1::debug(const std::ostream& out)
{
out << "some text" << someVar << "some text" << std::endl;
}
Сообщение об ошибке VS
ошибка C2678: двоичный файл «<<»: не найден оператор, который принимает левый операнд типа «const std :: ostream» (или нет допустимого преобразования) </p>
Любой кий?
[Закрыто]
Теперь я реализовал перегруженный оператор << для моих классов, и использование функции печати отладки закрыто. Большое спасибо за все подсказки. </p>