0

Supposons que nous avons ci-dessous deux classes:un moyen d'omettre de prendre des noms pour les objets qui ne sont utilisés que pour construire un objet final

class Temp{ 
public: 
    char a; 
    char b; 
}; 
class Final{ 
private: 
    int a; 
    char b; 
    char c; 
public: 
    Final(Temp in):b(in.a),c(in.b){} 
    //rest of implementation 
}; 

suppose que la seule utilisation des objets de la classe Temp est de construire des objets de la classe finale , donc je me demande si dans la norme actuelle de C++, nous pouvons utiliser une macro ou en quelque sorte dire au compilateur, puisque cet objet de classe Temp que je définis est seulement utilisé dans une ligne de code et c'est comme argument du constructeur de Final classe; Prenez un nom pour cela, donc je ne m'embête pas à prendre un nom pour chaque objet de la classe Temp?

Répondre

0

il n'y a pas une telle chose que je veux en c courant ++ standard, mais dans les prochains C++ 0x standard, pour initialiser un objet de la classe finale, nous pouvons écrire:

Final obj({'a','b'}); 

donc pas pour objet de nommage initialiseur de la classe Temp !!!

3

Eh bien, ce n'est pas vraiment le seul endroit Temp est utilisé, parce que vous devez construire un objet Temp lorsque vous appelez le constructeur, non?

Quant à « prendre des noms, » vous pouvez utiliser une classe imbriquée:

class Final 
{ 
public: 
    struct ConstructorParameter { char a, b; }; 

    Final(const ConstructorParameter& in) { ... }; 
}; 

Ou, bien sûr, vous pouvez simplement faire un constructeur avec les deux paramètres:

class Final 
{ 
public: 
    Final(char a, char b) { ... }; 
}; 
1

Si c'est juste deux sous-objets, utilisez std::pair<char,char>.

Si votre code actuel a plus d'entre eux, utilisez un tuple (soit std::tuple ou std::tr1::tuple ou boost::tuple.)

+0

Mais les sous-parties souvent nommées rendent le code beaucoup plus clair. –

+0

supposons que nous voulons utiliser un tuple qui a un tableau avec 11 éléments, alors comment est-il possible d'omettre de prendre le nom pour cela? – Pooria

+0

@Pooria: Tout cela semble très artificiel; Si vous avez onze objets, je suppose que ceux-ci sont tous liés d'une certaine façon et qu'une structure nommée aurait beaucoup plus de sens. Pourquoi êtes-vous si inquiet de nommer la structure? –