Я хотел бы сохранить и обновить путь к каталогу по умолчанию, который используется QFileDialog::getOpenFileName
а также QFileDialog::getSaveFileName
, Для этого я создал функции-обертки вокруг двух и третьей общей функции:
QString GetSaveFile (QWidget *parent, const QString &title, const QString &desc)
{
return GetFile (&QFileDialog::getSaveFileName, parent, title, desc);
}
QString GetOpenFile (QWidget *parent, const QString &title, const QString &desc)
{
return GetFile (&QFileDialog::getOpenFileName, parent, title, desc);
}
QString GetFile (std::function <QString (QWidget *, const QString&, const QString&, const QString&, QString*, QFileDialog::Options)> func,
QWidget *parent, const QString &title, const QString &desc)
{
// this produces C2064
QString path = func (parent, title, CurrentDir, desc, 0, 0);
if (!path.isEmpty())
UpdateCurrentDir (QFileInfo (path).absoluteDir().path());
return path;
}
Однако во время компиляции я получаю
error C2064: term does not evaluate to a function taking 6 arguments
Но мой первый аргумент является функция, которая принимает 6 аргументов. Что я делаю неправильно?
Я понял. Это связано с ограничениями MSVC для функций с переменными числами, как описано здесь:
В MSVC функция переменной не может принимать более 5 аргументов по умолчанию. переосмысление _VARIADIC_MAX
решил проблему:
#ifdef _VARIADIC_MAX
#undef _VARIADIC_MAX
#endif
#define _VARIADIC_MAX 10