Si vous utilisez beaucoup la fonction var_dump en PHP vous aimerais surement on a voir sur d’autre langage comme le C++, du fait quelle donne des information utiles sur le type et le contenue de la variable.

Ce bout de code va tenter ainsi de reproduire son fonctionnement et son utilisation a peu de chose prés.

Pour la ré-implémentation nous utiliseront une macros qui sera appelez par le utilisateur (développeur) et qui a son tours se charge d’appeler la fonction adéquate au type de la variable.

L’utilisation des macros est notamment la pour ajouter quelques information supplementaire comme le nom de la variable, la ligne et le fichier

#define var_dump(v) tbe::tools::var_dump_print(v, #v, __LINE__, __FILE__)

Apres cela une fonction template est appeler en fonction du type de variable ça permet de prendre en charge les type complexe comme les tableaux ou tableaux associatifs.

Noté avec cette méthode on pourras supporter en tant de type que nous voulons, suffit d’implémenter les routines d’affichage correspondante.

template void var_dump_print(const T1& var, const char* name, int line, const char* file)
{
    using namespace std;

    cout << typeid (var).name() << "(" << name << ")@" << strrchr(file, '/') << ":" << line << endl;

    cout << var << endl;
}

template void var_dump_print(const std::map<T1, T2>& stdmap, const char* name, int line, const char* file)
{
    using namespace std;

    cout << "std::map(" << name << ")@" << strrchr(file, '/') << ":" << line << endl;

    for(typename map<T1, T2>::const_iterator it = stdmap.begin(); it != stdmap.end(); it++)
        cout << "  [" << it->first << "] = " << it->second << endl;
}

template void var_dump_print(const std::vector& stdvec, const char* name, int line, const char* file)
{
    using namespace std;

    cout << "std::vector(" << name << ")@" << strrchr(file, '/') << ":" << line << endl;

    for(unsigned i = 0; i < stdvec.size(); i++)
        cout << stdvec[i] << endl;
}