최근에 C++ 17 표준에 도입 될 std::is_invocable을 우연히 발견했습니다. 사용자에게 왜 형식을 제공해야하는지 궁금합니다. 특히 비 형식 템플릿 매개 변수가 이제 제약을받지 않기 때문에 더욱 편리 할 수있는 함수 포인터 자체를 제공하는 것과는 대조적으로.std :: is_invocable이 non type 템플릿 매개 변수를 사용하지 않는 이유는 무엇입니까?
는 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(이 것을 느끼지 마십시오.)를 참조하십시오. 실제로 속는 사람입니다.) 함수의 유형을 첫 x 째 템플리트 매개 변수로 정의해야하지만 나머지 템플리트 매개 변수가 필요합니다. –
하나는 유형이고 다른 하나는 값입니다. –
@SamVarshavchik 야, 무슨 소리 야? C++ 17,'template auto'. – Barry