You may use a temporary object:
My::My(sc_core::sc_module_name nm, int ID)
: sc_core::sc_module(sc_core::sc_module_name((string(nm).append(1,ID<26 ?'A'+ID : 'A'+ID +6)).c_str()))
But I would move the stuff into a free function:
sc_core::sc_module_name concatenate(sc_core::sc_module_name nm, int ID){
std::string res(nm);
res.append(1,ID<26 ? 'A'+ID : 'A'+ID+6);
return res.c_str();
}
My::My(sc_core::sc_module_name nm, int ID)
: sc_core::sc_module(concatenate(nm, ID))
This makes the whole code easier to understand and more maintainable...
Cheers