Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

for_each sur une typelist ?

14 réponses
Avatar
John Deuf
Bonjour,

J'aimerais utiliser une fonction de type for_each pour une typelist.
Quelqu'un d'entre vous l'a-t-il déjà écrite ou saurait où je peux la
trouver ? (Si elle est techniquement faisable, évidemment).

Actuellement j'écris :

#include <Typelist.h>
using namespace Loki;

class toto;
class titi;
typedef LOKI_TYPELIST_3(int, toto, titi) trucs;

template<int I>
class boucle {
private:
enum { go = (I-1) != 0 };

public:
static inline void travaille()
{
boucle<go ? (I-1) : 0>::travaille();

TL::TypeAt<trucs, I-1>::Result temp(40);
// fais des choses...
std::cout << temp << std::endl;
}
};

template <> class boucle<0> {
public:
static inline void travaille()
{ }
};

int main()
{
boucle< 3 >::travaille();
return 0;
}

Ce qui m'oblige à savoir la taille de la typelist et aussi de modifier
son nom dans la classe boucle.
J'aimerais écrire un truc du genre :
for_each::travaille( trucs );

Merci d'avance.

--
John Deuf

4 réponses

1 2
Avatar
John Deuf
Mickaël Wolff :

C'est quoi une typelist pour toi ? (désolé, mais la macro on peut
pas deviner ce qu'elle fait).



Désolé, j'ai pas précisé car c'est une macro assez connue de la
bibliothèque Loki.
http://loki-lib.sourceforge.net/

À l'origine venant de l'ouvrage "Modern C++ Design".

--
John Deuf
Avatar
Fabien LE LEZ
On 16 Jun 2009 16:53:48 GMT, John Deuf :

Qu'est-ce qui te fais penser que je n'ai pas compris le code ?



Par exemple, le fait que tu utilises la constante "go" qui ne sert à
rien.
Avatar
Mathias Gaunard
On 16 juin, 15:57, John Deuf wrote:
Bonjour,

J'aimerais utiliser une fonction de type for_each pour une typelist.
Quelqu'un d'entre vous l'a-t-il déjà écrite ou saurait où je peux la
trouver ? (Si elle est techniquement faisable, évidemment).




Actuellement j'écris :

#include <Typelist.h>
using namespace Loki;

class toto;
class titi;
typedef LOKI_TYPELIST_3(int, toto, titi) trucs;



Les typelists de Loki c'est pas vraiment très avancé.

Il vaut mieux utiliser Boost.MPL.

typedef mpl::vector<int, toto, titi> trucs;

struct foo
{

void operator()()
{
// ce que tu veux
}
};

mpl::for_each<trucs, F>(f);


template<int I>
class boucle {
private:
        enum { go = (I-1) != 0 };

public:
        static inline void travaille()
        {
                boucle<go ? (I-1) : 0>::travaille();

                TL::TypeAt<trucs, I-1>::Result temp(40);
                // fais des choses...
                std::cout << temp << std::endl;
        }

};

template <> class boucle<0> {
public:
        static inline void travaille()
        { }

};

int main()
{
        boucle< 3 >::travaille();
        return 0;

}

Ce qui m'oblige à savoir la taille de la typelist et aussi de modifier
son nom dans la classe boucle.
J'aimerais écrire un truc du genre :
        for_each::travaille( trucs );

Merci d'avance.

--
John Deuf


Avatar
Mathias Gaunard
On 16 juin, 15:57, John Deuf wrote:
Bonjour,

J'aimerais utiliser une fonction de type for_each pour une typelist.
Quelqu'un d'entre vous l'a-t-il déjà écrite ou saurait où je peux la
trouver ? (Si elle est techniquement faisable, évidemment).

Actuellement j'écris :

#include <Typelist.h>
using namespace Loki;

class toto;
class titi;
typedef LOKI_TYPELIST_3(int, toto, titi) trucs;



Les typelists de Loki c'est pas vraiment très avancé.

Il vaut mieux utiliser Boost.MPL.

typedef mpl::vector<int, toto, titi> trucs;

struct foo
{
template<typename T>
void operator()(T)
{
T::travaille();
}

};

mpl::for_each<trucs>(foo());
1 2