Wenn Sie neu in C++ sind, wird das Hinzufügen neuer Bibliotheken (Vorlage oder anders) zu Ihrer Installation nur die Lernkurve erhöhen. Dies können Sie einfach, elegant und effizient mit den integrierten Funktionen tun.
Im Gegensatz zu ähnlichen Antworten, macht dieser Code nur einen Durchlauf über den Eingang und skaliert gut mit großen Wörterbücher:
// header
#include <map>
#include <sstream>
typedef std::map< std::string, std::string > subst_map;
// implementation
using namespace std;
string do_substitutions(string const &in, subst_map const &subst) {
ostringstream out;
size_t pos = 0;
for (;;) {
size_t subst_pos = in.find("{{", pos);
size_t end_pos = in.find("}}", subst_pos);
if (end_pos == string::npos) break;
out.write(&* in.begin() + pos, subst_pos - pos);
subst_pos += strlen("{{");
subst_map::const_iterator subst_it
= subst.find(in.substr(subst_pos, end_pos - subst_pos));
if (subst_it == subst.end()) throw runtime_error("undefined substitution");
out << subst_it->second;
pos = end_pos + strlen("}}");
}
out << in.substr(pos, string::npos);
return out.str();
}
// usage
pair< string, string > substitutions_init[] = {
make_pair("firstname", "homer"),
make_pair("lastname", "simpson")
};
subst_map substitutions
(substitutions_init, substitutions_init + sizeof(substitutions_init)/sizeof(*substitutions_init));
int main() {
cerr << do_substitutions("Mr. {{lastname}}, {{firstname}} esquire", substitutions) << endl;
}
Die 'Vorlagen' Tag ist hier nicht geeignet. Das Ersetzen von Zeichenfolgen innerhalb einer Vorlagenzeichenfolge entspricht nicht der üblichen Bedeutung von Vorlagen in einem C++ - Kontext. –
Mit 'actual one' meinen Sie eine Variable namens 'name', die im Bereich der String-Vorlage definiert ist? –
Was ist die Frage? –