У вас есть map
с ключом std::string
и, возможно, несколькими типами для печати.
Таким образом, вы можете использовать полиморфизм здесь, не используйте void *
, создайте интерфейс (Интерфейс в C ++является нормальным классом / структурой с абстрактными методами), называемым Printable, например, затем создайте карту как эту карту> или map> или map>, или даже сопоставьте строку с необработанным указателем Printable (не рекомендуется).Сделайте так, чтобы у вашего класса была виртуальная функция printableString, затем сделайте оператор дружественной функции << в ostream, где вы можете <code>cout << printableString()
Пример:
#include <iostream>
#include <memory>
#include <map>
using namespace std;
class Printable {
public:
virtual std::string printableString() const = 0;
friend ostream &operator << (ostream &stream, const Printable &printable) {
return stream << printable.printableString();
}
};
class PrintableString: public Printable {
private:
std::string string;
public:
PrintableString(std::string string): string(string) {}
virtual std::string printableString() const {
return string;
}
};
map<std::string, std::shared_ptr<Printable>> ptr;
int main() {
ptr["Aaaa"] = std::make_shared<PrintableString>("B");
cout << *(ptr["Aaaa"]);
return 0;
}