私は最近、C++ 17標準に導入されるstd::is_invocableを見つけました。なぜなら、なぜユーザにタイプを提供する必要があるのでしょうか?特に非型のテンプレートパラメータが今や拘束されることができないので、より便利かもしれない関数ポインタ自体を提供するのではなく、なぜstd :: is_invocableが非タイプのテンプレートパラメータを受け入れるのではない
はstd::is_invocable
ため
void hello_world() {
cout << "Hello world" << endl;
}
int main() {
cout << std::is_invocable_v<decltype(hello_world)> << endl;
// as opposed to being able to do
// cout << std::is_invocable_v<hello_world> << endl;
return 0;
}
テンプレートパラメータとして関数ポインタを渡すと、チキンと卵の問題が発生するので、http://stackoverflow.com/questions/1174169/function-passed-as-template-argumentを参照してください(これを感じないでください)。実際には二重である)。関数の型を最初のテンプレートパラメータとして定義する必要がありますが、そのためには残りのテンプレートパラメータが必要です。 –
1つはタイプであり、もう1つは値です。 –
@SamVarshavchik Dude、何言ってるの? C++ 17、 'template auto'です。 – Barry