Я создал следующий кусок кода, чтобы показать, что я пытаюсь сделать. Я не понимаю, как правильно использовать 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