Лучшее понимание 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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