struct myclass
{
myclass(void(*)()) {}
};
void test1(void(*)()) {}
void test2(myclass) { }
void cb() {}
int main()
{
test1(cb); // works
test2(cb); // works
test1([](){}); // works
test2([](){}); // does not work, why? there's no "explicit" keyword next to myclass.
}
为什么这不起作用?将lamba隐式转换为函数ptr以创建类
以下显然可行,但我不想使用它。
test2(myclass([]{}));
注:我不想接受std::function<void()>>
,我不想既可以创建template<T> myclass(T f) {}
。
是的,我已经知道有关parens。不知道为什么我让他们在那里。我不知道这个+技巧寿。非常感谢你! OMG! – James
OMG!那太糟了。我可以想象使用它,但事先会解释发生了什么,将会有10行注释! –
@Martin你为什么需要10行评论?你看到它一次,查看它,你知道它的意思。 – Barry