【发布时间】:2020-01-21 16:53:24
【问题描述】:
这里是注册函数。
template <typename ReqT, typename RespT>
bool RegisterCmdHandler(int cmd_id, std::function<int(int, const ReqT&, RespT&)> sync_handler) {
// ... do something with sync_handler and register it for later callback
return true;
}
以及要注册的特定处理程序:
int SomeHandler(int id, const Foo& req, Bar& resp) {
// ... specific logic
}
现在我想将处理程序应用到注册函数,编译器抱怨
RegisterCmdHandler(1, SomeHandler); // ERROR, compiler can not deduce
虽然具体写出类型就OK了:
RegisterCmdHandler<Foo, Bar>(1, SomeHandler); // OK, compiler can deduce
但后者有丑陋的 API。我怎样才能在工作中获得第一名?
【问题讨论】:
-
TL;DR:模板从不进行转换。
SomeHandler不是std::function,所以无法推断出std::function的类型。 -
@NathanOliver 建议的重复问题不回答“我如何在工作中获得第一个?”。
-
如果你只打算使用普通函数,你可以使用函数指针来代替。
标签: c++ boost template-meta-programming std-function template-argument-deduction