- 主题:这个功能是不是只有用宏来写?
要批量写一批函数
auto make_lambda()
{
return [this](int x) noexcept { return this->f(x); };
}
类似把member function f()转成lambda,然后可以放到类似
template<class T>
void invoker( T&& fun, int x)
{
fun(x);
}
然后需要f(x)可以替换
上面那个make_lambda()是不是没法用模板写,只有用宏?
--
FROM 125.120.163.*
函数指针?
template<typename classT, typename argT>
void Invoker(classT& t, int (classT::*memFun)(argT), argT x)
{
(t.*memFun)(x);
}
--
FROM 61.185.195.*
就是不想用指针啊,希望做成lambda,然后由编译器自动inline
【 在 DoorWay 的大作中提到: 】
: 函数指针?
: template<typename classT, typename argT>
: void Invoker(classT& t, int (classT::*memFun)(argT), argT x)
: ...................
--
FROM 112.65.30.*
正如free function可以作为模版参数一样,成员(非静态)函数也可以作为模版参数。但是调用时还是需要一个对象指针(显然)。大概也就能做到这里了,免不了还是要用宏包的。
- 来自 水木社区APP v3.5.3
【 在 ziqin 的大作中提到: 】
: 就是不想用指针啊,希望做成lambda,然后由编译器自动inline
--
FROM 183.179.53.*
三句一句没懂。
1 用指针会?
2 做成lambda会?
3 编译器inline是对谁inline? 有啥效果?(相比指针)
把Invoker名字改成make_lambda不行吗?
template<typename classT, typename argT>
auto make_lambda(classT& t, int (classT::*memFun)(argT))
{
return [](argT x) noexcept { return (t.*memFun)(x); };
}
【 在 ziqin 的大作中提到: 】
: 就是不想用指针啊,希望做成lambda,然后由编译器自动inline
:
--
修改:DoorWay FROM 61.185.195.*
FROM 61.185.195.*
要想支持任意函数,返回值多种类型,参数列表是变的话,得上变参那一套. 得查查改改。记不住语法。
搜一下吧,感觉是个成熟问题,covert any (member) function to lambda
--
FROM 61.185.195.*
这些函数会被高频呼叫,做成lambda inline比用函数指针少一次指针引用,在高频呼叫的时候,大概能快10%-15%
【 在 DoorWay 的大作中提到: 】
: 三句一句没懂。
: 1 用指针会?
: 2 做成lambda会?
: ...................
--
FROM 125.120.163.*
不懂。
4楼的模板满足你的要求不?
【 在 ziqin 的大作中提到: 】
: 这些函数会被高频呼叫,做成lambda inline比用函数指针少一次指针引用,在高频呼叫的时候,大概能快10%-15%
:
--
FROM 61.185.195.*
调用!调用!
- 来自 水木社区APP v3.5.3
【 在 ziqin 的大作中提到: 】
: 这些函数会被高频呼叫,做成lambda inline比用函数指针少一次指针引用,在高频呼叫的时候,大概能快10%-15%
--
FROM 183.179.53.*
要想缩短函数的调用路径,需要对函数进行特殊设计。
--
FROM 124.127.145.*