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) {}
を作成する必要はありません。
ええ、私はすでに括約筋について知っていた。なぜ私はそこにいたのですか?私は+トリックのthoについては全く知らなかった。大変ありがとうございました! – James
OMG!それは恐ろしいことだ。私はそれを使用して想像することができますが、何が起こっているかを事前に説明する10行のコメントがあるだろう! –
@Martinなぜ10行コメントが必要ですか?一度それを見て、それを見て、それが何を意味するかを知っている。 – Barry