我想存储和更新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 :(得分:1)
我明白了。这与变量函数的MSVC限制有关,如下所述:
Does C++11 std::function limit the number of arguments a function pointer can have?
在MSVC中,默认情况下,可变参数函数不能接受超过5个参数。重新定义_VARIADIC_MAX
解决了问题:
#ifdef _VARIADIC_MAX
#undef _VARIADIC_MAX
#endif
#define _VARIADIC_MAX 10