Ti serve una mappa contenente delle factory function.
Uno spunto potrebbe essere (non molto sofisticato):
codice:
class Chitarra: public Strumento{
    public:
        static Strumento* create(string attr) { return new Chitarra(attr); }
	
};

class Pianoforte: public Strumento{
    public:
        static Strumento* create(string attr) { return new Pianoforte(attr); }
};


typedef Strumento* (*PF)(string);

std::map<string,PF> FunctionMap;

FunctionMap.insert(make_pair("Chitarra",&Chitarra::create));
FunctionMapinsert(make_pair("Pianoforte",&Pianoforte::create));

vector<Strumenti*> instruments;

// Qui le stringhe arrivano da file. Quelle presenti sono solo come esempio.
instruments.push_back( FunctionMap["Chitarra"]("Elettrica"));
instruments.push_back( FunctionMap["Chitarra"]("Acustica"));
instruments.push_back( FunctionMap["Pianoforte"]("A coda"));