bool sendRequest(DataFieldList& requestParams,
DataFieldList& responseParams,
std::string context, void(*sendFailure)() = NULL);
sendRequest(paramList, responseList, "Could not set background lighting control brightness limit", HBCMaxBrightnessLimitSendFailure);
void HBCMaxBrightnessLimitSendFailure();
当我构建这个应用程序时,我得到错误:
lightingsystemcomponent.cpp(969): error C3867: 'Lighting::SystemComponent_impl::HBCMaxBrightnessLimitSendFailure': function call missing argument list; use '&Lighting::SystemComponent_impl::HBCMaxBrightnessLimitSendFailure' to create a pointer to member
我也试过:
sendRequest(paramList, responseList, "Could not set background lighting control brightness limit", HBCMaxBrightnessLimitSendFailure());
这将错误更改为:
lightingsystemcomponent.cpp(969): error C2664: 'bool Lighting::SystemComponent_impl::sendRequest(DataFieldList &, DataFieldList &,std::string,void (__cdecl *)(void))' : cannot convert argument 4 from 'void' to 'void (__cdecl *)(void)'
bool sendRequest(DataFieldList& requestParams,
DataFieldList& responseParams,
std::string context,
std::function<void()> sendFailure = NULL);
void LightingEngine::sendRequest(DataFieldList& requestParams,
DataFieldList& responseParams,
std::string context,
std::function<void()> sendFailure) {
if ( sendFailure != NULL ) {
sendFailure();
}
error C2064: term does not evaluate to a function taking 0 arguments
下面是调用这个例程的类和我传递的回调函数的示例:
void component::onFailure() {
...Do something...
}
void component::update() {
... Some set-up to build paramlist ...
LightingEngine* engine = getLightingEngine();
assert(engine != nullptr);
engine->sendRequest(¶mList, &responseList, "Some context text", [this]()->void { onFailure(); });
}
可以将SendFailure
声明为成员函数指针。
bool sendRequest(DataFieldList& requestParams,
DataFieldList& responseParams,
std::string context,
void(Lighting::SystemComponent_impl::*sendFailure)() = nullptr);
这将允许您写一个非常长的行:
sendRequest(paramList, responseList, "Could not set background lighting control brightness limit", &Lighting::SystemComponent_impl::HBCMaxBrightnessLimitSendFailure);
另一种选择是使用std::function
。
bool sendRequest(DataFieldList& requestParams,
DataFieldList& responseParams,
std::string context,
const std::function<void()> &sendFailure = nullptr);
并调用sendrequest
,如下所示:
sendRequest(paramList, responseList, "Could not set background lighting control brightness limit", [this]{ HBCMaxBrightnessLimitSendFailure() });
template <typename Func>
bool sendRequest(DataFieldList& requestParams,
DataFieldList& responseParams,
std::string context,
Func sendFailure);
bool sendRequest(DataFieldList& requestParams,
DataFieldList& responseParams,
std::string context);
sendRequest(paramList, responseList, "Could not set background lighting control brightness limit", [this]{ HBCMaxBrightnessLimitSendFailure() });
我创建了一个名为InputControl的类。我正在使用一个名为GLFW的库和一个函数glfwsetkeycallback。该函数定义为: E0167“void(inputcontrol::*)(GLFWwindow*window,int key,int scancode,int action,int mods)”类型的参数与“GLFWKeyFun”类型的参数不兼容
我正在尝试编写一个类模板,在内部它使用一个函数(BFGS优化的实现,由环境提供),接口如下: 其中< code>fn和< code>gr是类型的函数指针 和 分别是。我的< code>C 类模板如下所示: 这样,它可以由任何具有两个指定成员函数的类进行实例化,例如: 这可能吗?或者也许有更好的方法来做到这一点 - 将两个成员函数分别作为函数指针传递?(如果目标函数和相应的梯度很简单,那么编写两个函
C++ 指针 C++ 允许您传递指针给函数,只需要简单地声明函数参数为指针类型即可。 下面的实例中,我们传递一个无符号的 long 型指针给函数,并在函数内改变这个值: #include <iostream> #include <ctime> using namespace std; void getSeconds(unsigned long *par); int main () {
我的问题是,我想创建一个通用的命令行应用程序,可以用来加载一个库DLL,然后调用库DLL中的函数。函数名在命令行中指定,参数也在实用程序命令行中提供。 我可以使用函数从动态加载的DLL访问外部函数。加载库后,我可以使用获得指向函数的指针。我想用命令行上指定的参数调用函数。 我是否可以将空点指针列表传递给 函数返回的函数指针,类似于下面的示例? 为了保持示例代码简单,我删除了错误检查。有没有办法让这
我有以下代码: 我正在尝试将char和char指针数组传递给函数,但上面的代码会导致以下错误和警告: 我正在努力理解问题是什么。
问题内容: 我有以下功能: 其中,的类型是具有以下定义的接口: 题: 这是真的,和是 通过按引用 ,并且有它的价值被复制? 我认为: 是通过引用的,因为它是一张地图 是一个结构。因此,我应该传递指针以避免复制数据 问题答案: 接口类型只是一组方法。请注意,接口定义的成员未指定接收方类型是否为指针。这是因为 值类型的方法集是其关联的指针类型的方法集的子集 。满嘴 我的意思是,如果您具有以下条件: 然