Если мне не изменяет память (а она может, с С++ работал давно), то вот тут есть проблемка: struct NodeName
{
//Вот это будет создавать временные объект, копировать значение и удалять, т.к. для string желаемая автором логика не будет работать, и надо что-то вроде std::forward NodeName(const std::string& name);
//А еще у меня есть подозрения, что на самом деле вызывается вот этот конструктор обычно, а не тот, что выше, из-за логики по умолчанию при приведении типов NodeName(const char* name);
std::forward нужен для передачи универсальных ссылок. std::string вполне комфортно копируется и передаются по константным ссылкам. Ибо существовал задолго до появления std::forward(C++11) C макросом, который я использую для инициализации, только этот конструктор(const char* name) и будет вызываться. std::string оставлен для консистентности, ибо я храню с помощью std::string
Если мне не изменяет память (а она может, с С++ работал давно), то вот тут есть проблемка:
struct NodeName
{
//Вот это будет создавать временные объект, копировать значение и удалять, т.к. для string желаемая автором логика не будет работать, и надо что-то вроде std::forward
NodeName(const std::string& name);
//А еще у меня есть подозрения, что на самом деле вызывается вот этот конструктор обычно, а не тот, что выше, из-за логики по умолчанию при приведении типов
NodeName(const char* name);
Но могу ошибаться :D
std::forward нужен для передачи универсальных ссылок. std::string вполне комфортно копируется и передаются по константным ссылкам. Ибо существовал задолго до появления std::forward(C++11)
C макросом, который я использую для инициализации, только этот конструктор(const char* name) и будет вызываться. std::string оставлен для консистентности, ибо я храню с помощью std::string