我有以下两个课程:
Class Client
{
...
void defineFunctorAndHitServer()
{
std::function<void(const std::vector<uptr<Stuff>>& things,
const char *statusMessage = MESSAGE_SUCCESS,
const int statusCode = STATUS_CODE_NO_ERROR)> completionHandler(
[](
const std::vector<uptr<Stuff>>& things,
const char *statusMessage = MESSAGE_SUCCESS,
const int statusCode = STATUS_CODE_NO_ERROR
) {
// do something awesome ad hoc
}
);
// instance of class Server
serverInstancePtr->doSomethingAndCallbackClientFunctor(completionHandler);
}
}
Class Server
{
...
void doSomethingAndCallbackClientFunctor(std::function<void(const std::vector<uptr<Stuff>>&, const char* = MESSAGE_SUCCESS, const int = STATUS_CODE_NO_ERROR)> completionHandler)
{
std::vector<uptr<Stuff>> myThings;
// populate myThings
completionHandler(myThings);
}
}
的想法是,如果省略的填充操作成功,则仅使用向量从Server调用完成处理程序,否则使用状态消息和状态代码进行调用,以帮助进行日志记录/调试。
我以为我可以仅使用向量arg来调用Server中的functorcompleteHandler,因为其他两个参数都是默认参数,但是编译器在completionHandler下给我一个混乱的说法,称“被调用的对象不是函数”。这是怎么了如果这行不通,那么如何才能实现类似的功能,其中在每种情况下都不需要给函子的所有参数赋予具体的参数?