Передача статической функции-члена в качестве аргумента

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

0

Решение

Я понял. Это связано с ограничениями MSVC для функций с переменными числами, как описано здесь:

Ограничивает ли C ++ 11 std :: function количество аргументов, которые может иметь указатель на функцию?

В MSVC функция переменной не может принимать более 5 аргументов по умолчанию. переосмысление _VARIADIC_MAX решил проблему:

#ifdef _VARIADIC_MAX
#undef _VARIADIC_MAX
#endif
#define _VARIADIC_MAX 10
1

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector