Si es nuevo en C++, agregar nuevas bibliotecas (plantilla u otras) a su instalación solo aumentará la curva de aprendizaje. Esto es algo que puede hacer de manera simple, elegante y eficiente con las características incorporadas.
A diferencia de respuestas similares, este código hace sólo un pase de entrada y escalas bien con grandes diccionarios:
// 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;
}
La etiqueta 'plantillas' no es apropiada aquí. Reemplazar cadenas dentro de una cadena de plantilla no es lo mismo que el significado habitual de las plantillas en un contexto de C++. –
Por 'actual', ¿quiere decir una variable llamada 'nombre' definida en el alcance de la plantilla de cadena? –
¿Cuál es la pregunta? –