从这里看来,似乎
它有
为什么它不在其接口中提供这样的类型呢?
肯定有一个很好的原因,但我想不出是什么原因,所以我只是好奇想找出来。
std::function
没有function_type
或等效成员类型导出用于初始化它的实际类型。它有
result_type
、argument_type
以及first_argument_type
和second_argument_type
,但没有像上面提到的类型。为什么它不在其接口中提供这样的类型呢?
肯定有一个很好的原因,但我想不出是什么原因,所以我只是好奇想找出来。
我知道第一个问题会是你为什么需要它,好吧,想象一下我想做类似于std::is_same<F1 :: function_type,F2 :: function_type> :: value
这样的事情,在 sfinae 评估中检查它们的底层类型是否相同,其中如果它们包含不同的函数而符号相同就可以了。
诚然,我承认这没什么意义,说实话这个问题只是出于好奇。
编辑
如@Brian在他的答案评论中所指出的那样,当我写:时,我错误地使用了初始化这个术语:
导出用于初始化它的实际类型
我感兴趣的确实是模板参数。
例如,对于一个std::function<void(S&, int)>
(其中S
是一个结构体),function_type
将为void(S&, int)
。
is_same
检查,你可以简单地检查F1
和F2
是否是相同的类型,是吗? - Brian Bi