Je bloque sur un pb de métaprog. Je cherche à initialiser une chaîne de caractères contenant la liste des nombres compris entre 0 et N séparés par des espaces. Il semblerait que seuls les types 'integral' soit manipulables. Donc pas de string.
Publicité
Posté le 25-02-2005 à 23:06:47
Taz
bisounours-codeur
Posté le 26-02-2005 à 11:58:19
le seul truc que tu peux faire, c'est manipuler des pointeurs, genre const char* ayant une visibilité extern
Taz
bisounours-codeur
Posté le 26-02-2005 à 12:01:20
j'avais pas lu le pseudo. Tu ferais peut être mieux de lire quelques uns de ces livres avant
Je bloque sur un pb de métaprog. Je cherche à initialiser une chaîne de caractères contenant la liste des nombres compris entre 0 et N séparés par des espaces. Il semblerait que seuls les types 'integral' soit manipulables. Donc pas de string.
Code :
#include <iostream>
#include <sstream>
#include <boost/mpl/range_c.hpp>
#include <boost/mpl/for_each.hpp>
namespace mpl = boost::mpl;
namespace fab
{
typedef mpl::range_c<int,2,8>::type seq_int;
struct concat
{
template <class T>
voidoperator()(T t)const
{
ost << ' ' << T::value;
}
concat(std::ostringstream& os) : ost(os) {}
private:
std::ostringstream& ost;
};
}//namespace fab
int main()
{
std::ostringstream os;
fab::concat c(os);
mpl::for_each<fab::seq_int>(c);
std::cout << os.str() << '\n';
}
un hybride meta/runtime, ça vaut ce que ça vaut, mais c'est du travail d'acrobate d'etre à la frontiere des deux mondes ... les spécialisations sont délicates
seq_int a des iterateurs begin et end dans le méta-monde mais pas au runtime comme le demande std::copy. Ou alors, y a une façon de faire que j'ignore.
Publicité
Posté le 27-02-2005 à 13:42:23
++fab
victime du syndrome IH
Posté le 27-02-2005 à 13:44:25
attend, je vois ptet ce que tu veux dire ...
EDIT: réécrire ça :