我希望能够仅使用封装的lambda的名称而不是具有硬编码的签名来实例化 $('#gender').bootstrapToggle({
on: 'Male',
off: 'Female',
onstyle: 'success',
offstyle: 'danger'
});
$('#gender').change(function(){
if($(this).prop('checked'))
{
$('#hidden_gender').val('Male');
}
else
{
$('#hidden_gender').val('Female');
}
});
:
std::function
对于#include <functional>
auto l = [](bool b){ return b ? 1 : 0; };
std::function<int(bool)> f(l); // XXX - don't want the type hardcoded
// Is something like this possible?
// using sig_t = strip_memberness<decltype(l::operator())>;
// std::function<sig_t> f(l);
参数,有没有办法从std::function<>
产生类型int(bool)
?
即使C ++ 17样式的模板参数推导将来可能使这种特殊情况成为可能,我很不幸地仅限于GCC 6 / C ++ 14,并且我也希望出于模板之外的目的访问类型实例化。
答案 0 :(得分:3)
遵循以下原则:
#include <functional>
template <typename T>
struct MemberToFunction;
template <typename R, typename T, typename ... Args>
struct MemberToFunction<R (T::*)(Args...)> {
using type = R(Args...);
};
template <typename R, typename T, typename ... Args>
struct MemberToFunction<R (T::*)(Args...) const> {
using type = R(Args...);
};
int main()
{
auto l = [](bool b){ return b ? 1 : 0; };
std::function<MemberToFunction<decltype(&decltype(l)::operator())>::type> f(l);
}