Portabilität: std::for_each

Datumsansicht Baumansicht Betreffansicht Attachement-Sicht

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.de

Fuer jedes komplexe Problem gibt es eine Loesung die einfach, schoen und falsch ist. (H. L. Mencken)


Datumsansicht Baumansicht Betreffansicht Attachement-Sicht

Dieses Archiv wurde generiert von hypermail 2.1.4 : 20. Aug 2002 CEST