begin process at 2012 05 28 22:39:54
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Général

 > 

Constructeur à nombre variable d'arguments


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Constructeur à nombre variable d'arguments

dimanche 28 novembre 2010 à 11:26:11 | Constructeur à nombre variable d'arguments

exar

Membre Club
Bonjour à tous,

Est-il possible de créer un constructeur de classe avec un nombre variable d'arguments à l'aide de cstdarg ?
Merci pour vos réponses !

Exar
dimanche 28 novembre 2010 à 18:24:26 | Re : Constructeur à nombre variable d'arguments

CptPingu

Administrateur CodeS-SourceS
Il me semble que c'est possible: http://www.codeguru.com/forum/showthread.php?t=274909

Néanmoins, pourquoi ne pas passer un tableau comme argument de ton constructeur ?

________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
dimanche 28 novembre 2010 à 18:52:13 | Re : Constructeur à nombre variable d'arguments

exar

Membre Club
Pour pouvoir passer des arguments de types différents.
lundi 29 novembre 2010 à 12:25:56 | Re : Constructeur à nombre variable d'arguments

CptPingu

Administrateur CodeS-SourceS
Réponse acceptée !
Si je ne m'abuse, normalement on ne peut mettre d'arguments de type différent dans une liste variable d'arguments.
Tu peux toujours faire un tableau de boost::variant ou boost::any.
Ou alors, "templaté" ton constructeur. Mais malheureusement, les templates variadics n'existent pas en C++. Donc je n'ai pas de "vraie" solution à te donner.

J'ai bien une solution, mais elle ne fonctionne qu'en C++0x.

Compilé avec "g++ -std=c++0x":
Code C/C++ :
#include <iostream>
#include <cstdarg>
#include <boost/any.hpp>

void printAny(std::ostream& out, const boost::any& value)
{
  if (typeid(float) == value.type())
    out << boost::any_cast<float>(value) << ", ";
  else if(typeid(int) == value.type())
    out << boost::any_cast<int>(value) << ", ";
  else if (typeid(std::string) == value.type())
    out << boost::any_cast<std::string>(value) << ", ";
  else
    out << "Unknow type: " << value.type().name() << ", ";
}

template <typename... T>
class Test
{
public:
  Test(const T&... args)
  {
    const unsigned int size = sizeof...(T);
    boost::any array[size] = { args... };

    for (unsigned int i = 0; i < size; ++i)
      printAny(std::cout, array[i]);
    std::cout << std::endl;
  }
  ~Test()
  {
  }
};

int main()
{
  std::cout << "Test" << std::endl;

  Test<>();
  Test<int>(547);
  Test<int, int>(4, 6);
  Test<bool>(true);
  Test<int, std::string>(18, "Kikoo");

  Test<int, int, int, int, int, int, int, int, int, int, int, int, int, int>
    (4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17);

  return 0;
}


________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
lundi 29 novembre 2010 à 12:34:22 | Re : Constructeur à nombre variable d'arguments

exar

Membre Club
Tu es bien certain ? Dans le cas de printf, par exemple, on peut passer des arguments de types différents...
lundi 29 novembre 2010 à 12:49:02 | Re : Constructeur à nombre variable d'arguments

CptPingu

Administrateur CodeS-SourceS
Réponse acceptée !
Il me semble que c'est mis dans un conteneur invariant, et qu'il faille ensuite préciser le type (dans le format du printf). Je n'en suis pas sur à 100%.

Néanmoins, je suis sur à 100% qu'il est impossible de faire un constructeur à nombre d'argument variable en C++. (Possible en C++0x).
Si tu regardes le code source de boost::tuple, tu verras qu'ils écrivent une dizaine de constructeurs à la main.

________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
lundi 29 novembre 2010 à 12:59:56 | Re : Constructeur à nombre variable d'arguments

exar

Membre Club
OK, merci ! Je vais jeter un ½il à ca.


Cette discussion est classée dans : nombre, variable, constructeur, arguments


Répondre à ce message

Sujets en rapport avec ce message

DLL et nombre d'arguments [ par garslouche ] Bonjour,j'ai une DLL avec une fonction qui attend 3 arguments.Si j'utilise cette fonction avec 4 arguments ou plus, cela pose-t-il un problème (risque recupérer nombre d'une createwindow [ par barbar ] voila, en fait, g un ptit pb, jveu faire 1 boucle en utilisant une variable que je rentre au clavier dans une editbox, le probleme, c ke j'arrive a ré liste d'arguments variable [ par clenio ] Salutest ce que qqu pourrait me dire comment on peut accéder au argument qui n'ont pas étés nommés?clenio pb ecriture nombre opengl [ par mat74 ] salut je suis en train de faire 1 programme en open gl et jai 1 pb.c'est 1 calculette.et qd j'affiche le résultat en déclarant la variable résultat co Probleme ....... [ par miximog ] Bonjour,  je vais éssayez d'etre claire en faite voici mon problème je voudrai que mon programme soit totalement paramétrable par l'uttilisateur jusqu Probléme variable static et classe incompréhension [ par Booster ] Bonjour,Voilà, j'ai une incompréhension au niveau d'une variable static. Voici mon code :maclasse.hclass maclasse; //Ca me sert juste à ce que ma vari écrire une fonction avec un nombre d'arguments variables [ par thespartan ] Je fais de la compilation séparée et j'aimerais éviter autant que possible l'utilisation de variables globales ou de extern (pas parceque je sais pas Problème allocation mémoire de variable et utilisation par constructeur de classe [ par lectpe ] Bonjour à tous.Encore une fois, j'ai besoin d'aide, mais cette fois ci en C++.J'ai suis en-train de créer un programme qui servira pour le gameplay d' corrigez moi ce code si possible pour les classes [ par rosettesouna ] [color=blue][/color][b][size=100][/size][/b]slt tous le monde j'ai ce travail pour le lundi:[b][/b] en utilisant la classe point(en 3D),donner la defi String et nombre en variable ?!? compatible? [ par ledeveloppeurfou ] Voila j'écris cela comme code:int a = 0; // ou tout autre valeur, il pourrait être tiré au // hazardCstring sortie = a;Et le problème e


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,577 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales