Autor: Mark Seuffert (captain_at_pirate.de)
Datum: 20. Aug 2002
Hi,
beim Testen hab ich festgestellt das wohl die STL Version von MSVC6 nicht
ganz funktioniert. Ja bischen OT, weil eine Unix-Liste... vielleicht ist
es für den einen anderen trotzdem interessant.
Es werden von for_each wohl nicht alle 3 Varianten eine Funktion
aufzurufen unterstützt (aus "Effective STL", letztere macht Probleme):
func(x); //func is a non-member function
x.func(); //func is a member function, x is object or reference
p->func(); //func is a member function, p is pointer to x
Der folgende Code geht unter gcc, jedoch nicht unter MSVC6 (ohne "stlport"
oder ähnlichen replacements). Bei MSVC bricht der Compiler mit einem
Fehler ab "void-function returns a value" bei Aufruf von mem_fun.
------------------ schnipp ---------------------
#include <stdio.h>
#include <list>
#include <algorithm>
#include <functional>
class CServer
{
public:
CServer(int value) { m_value = value; }
void debug() { printf("it's me %d\n", m_value); }
int m_value;
};
int main()
{
CServer one(1);
CServer two(2);
//creating a list
std::list<CServer*> ServerList;
ServerList.push_back(&one);
ServerList.push_back(&two);
//showing list (does NOT compile on MSVC6, yes sux)
std::for_each(ServerList.begin(), ServerList.end(),
std::mem_fun(&CServer::debug));
//showing list (less elegant, slower, oldfashioned)
std::list<CServer*>::iterator it;
for(it = ServerList.begin(); it != ServerList.end(); it++)
(*it)->debug();
return 0;
}
------------------ schnapp ---------------------
-- Mark "Moak" Seuffert, Pirates Entertainment, http://www.pirate.deFuer jedes komplexe Problem gibt es eine Loesung die einfach, schoen und falsch ist. (H. L. Mencken)
Dieses Archiv wurde generiert von hypermail 2.1.4 : 20. Aug 2002 CEST