Лучшее понимание std :: forwardC++

Программы на C++. Форум разработчиков
Anonymous
Лучшее понимание std :: forward

Сообщение Anonymous »

Я создал следующий кусок кода, чтобы показать, что я пытаюсь сделать. Я не понимаю, как правильно использовать Std :: Forward , поэтому код может работать неправильно. У меня есть std :: map с именем mymap . Ключ-это прямой путь, похожий на пути файлов, используемые в OSES на основе UNIX. Ключ , указанный на функцию InsertValue, может начинаться с точки, указывающей относительный путь. Условие ниже заменяет относительный путь на абсолютный путь. Теперь к вопросе ... < /p>
Как правильно реализовать следующую функцию? Вот мои проблемы: < /p>

[*] Это позволит передавать все виды аргументов, то есть для движения и для копирования? < /Li>
Если происходит перемещение, могу ли я сделать следующее: key = getabsolutepath (key);
Мне нужно использовать шаблон для ключа и value или я могу просто использовать std :: string ? На основе комментариев: < /p>
template
void insertValue(Key &&key, Value &&value)
{
auto absoluteKey = isRelativePath(key) ? getAbsolutePath(std::forward(key)) : std::forward(key);
myMap.insert_or_assign(std::move(absoluteKey), std::forward(value));
}

edit 2:
для тех, кто хочет также эффективно использовать Getabsolutepath Вот пример код:
template
std::decay_t getAbsolutePath(T &&path)
{
std::string prefix = "/example/base/path/";
return prefix + std::forward(path);
}


Подробнее здесь: https://stackoverflow.com/questions/794 ... stdforward

Вернуться в «C++»