gpt4 book ai didi

c++ - 将静态成员函数作为参数传递

转载 作者:行者123 更新时间:2023-11-28 06:42:48 24 4
gpt4 key购买 nike

我想存储和更新 QFileDialog::getOpenFileNameQFileDialog::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 对可变参数函数的限制有关,如下所述:

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

关于c++ - 将静态成员函数作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25622610/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com