Сценарий добавляет ссылку для загрузки видео (на определенном сайте). Как изменить имя файла на другое при загрузке?
Example URL:
"http://website.com/video.mp4"
Example of what I want the filename to be saved as during download:
"The_title_renamed_with_javascript.mp4"
-121--1258577- Это, вероятно, философский вопрос, но я столкнулся со следующей проблемой:
Если определить std:: function, и вы не инициализируете ее правильно, ваше приложение потерпит крах, вот так:
typedef std::function<void(void)> MyFunctionType;
MyFunctionType myFunction;
myFunction();
Если функция передается в качестве аргумента, вот так:
void DoSomething (MyFunctionType myFunction)
{
myFunction();
}
Тогда, конечно, она тоже терпит крах. Это означает, что я вынужден добавить код проверки следующим образом:
void DoSomething (MyFunctionType myFunction)
{
if (!myFunction) return;
myFunction();
}
Требование этих проверок дает мне мгновенный ответ на старые дни C, где вы также должны были проверить все аргументы указателя явно:
void DoSomething (Car *car, Person *person)
{
if (!car) return; // In real applications, this would be an assert of course
if (!person) return; // In real applications, this would be an assert of course
...
}
К счастью, мы можем использовать ссылки на C++, которые не позволяют мне записать эти чеки (предполагая, что вызывающий не передал содержимое nullptr функции:
void DoSomething (Car &car, Person &person)
{
// I can assume that car and person are valid
}
Итак, почему экземпляры std:: function имеют конструктор по умолчанию? Без конструктора по умолчанию не придется добавлять проверки, как и для других обычных аргументов функции. И в тех «редких» случаях, когда вы хотите передать 'необязательный' std:: function, вы по-прежнему можете передать указатель на него (или использовать boost:: optional).