Custom Output Methods
Conception d'interfaces d'impression flexibles
1. Implémentation de la méthode toString()
struct Product {
std::string name;
double price;
std::string toString() const {
return "Product[" + name + ", $" +
std::to_string(price) + "]";
}
};
2. Méthode de sortie configurable
class StructPrinter {
public:
enum class Format { COMPACT, VERBOSE, JSON };
template<typename T>
static std::string print(const T& obj, Format format = Format::COMPACT) {
switch(format) {
case Format::COMPACT:
return compactPrint(obj);
case Format::VERBOSE:
return verbosePrint(obj);
case Format::JSON:
return jsonPrint(obj);
}
}
};
Diagramme de flux des méthodes de sortie
graph TD
A[Custom Output Method] --> B[toString()]
A --> C[Configurable Formats]
A --> D[Serialization Techniques]
Comparaison des méthodes de sortie
Méthode |
Flexibilité |
Performance |
Cas d'utilisation |
Impression directe |
Faible |
Haute |
Structures (struct) simples |
toString() |
Moyenne |
Moyenne |
Débogage |
Sérialisation |
Haute |
Faible |
Objets complexes |
3. Approche de sérialisation
struct NetworkConfig {
std::string serialize() const {
std::ostringstream oss;
oss << "{"
<< "\"ip\":\"" << ip_address << "\","
<< "\"port\":" << port
<< "}";
return oss.str();
}
std::string ip_address;
int port;
};
Techniques avancées d'impression
4. Impression générique basée sur des templates
template<typename T>
class GenericPrinter {
public:
static void print(const T& obj, std::ostream& os = std::cout) {
os << "Object Details:" << std::endl;
printMembers(obj, os);
}
private:
template<typename U>
static void printMembers(const U& obj, std::ostream& os);
};
Modèles de développement LabEx
5. Sortie axée sur la journalisation
struct SystemLog {
std::string getMessage() const {
return "[" + timestamp + "] " + message;
}
std::string timestamp;
std::string message;
int severity;
};
Bonnes pratiques
- Gardez les méthodes de sortie concises.
- Prise en charge de plusieurs formats de sortie.
- Utilisez les constantes et les références.
- Gérez les exceptions potentielles.
- Tenez compte des implications en termes de performance.
Méthode de sortie sécurisée contre les erreurs
class SafePrinter {
public:
template<typename T>
static std::string safeToString(const T& obj) {
try {
return obj.toString();
} catch (const std::exception& e) {
return "Printing Error: " + std::string(e.what());
}
}
};
- Minimisez les allocations mémoire.
- Utilisez string_view pour les références non propriétaires.
- Privilégiez les techniques au moment de la compilation.
- Mettez en cache les résultats de formatage complexes.