【发布时间】:2016-04-08 20:56:23
【问题描述】:
从here 看来,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 在 his answer 的 cmets 中所指出的,我在写的时候误用了 initialize 这个词:
导出用于初始化它的实际类型
我真正感兴趣的是模板参数。
例如,对于std::function<void(S&, int)>(其中S 是一个结构),function_type 将是void(S&, int)。
【问题讨论】:
-
对于
is_same检查,你可以简单地检查F1和F2是否是同一类型,不是吗? -
@Brian 是的,当然,请注意我的评论我承认这没有多大意义!! :-) ...我只是想知道是否有原因它不是函数接口的一部分,即使我找不到它的合理用途,这已经很好了确实是回应。我不确定 it's useless 是否是唯一合理的回应,或者是否还有其他原因。就是这样。
标签: c++ c++11 std-function