31得票1回答
Clang实现std::function的移动语义背后的原因

在 libc++ 的 std::function 实现中,如果被擦除类型的函数对象足够小以适合 SBO 内,则移动操作会复制它,而不是移动它。然而,并非每个堆栈内存占用小的对象都最适合被复制。为什么要复制而不是移动呢? 考虑使用 Clang 的以下示例(使用 shared_ptr因为它具有引...

31得票2回答
使用std::function和std::bind时,模板参数推导/替换失败。

在使用模板成员函数中的std::function时,我遇到了一个编译错误,以下代码是一个简单的示例: #include <functional> #include <memory> using std::function; using std::bind; using...

30得票2回答
C++函数类型

我在理解函数类型方面遇到了问题(它们出现在例如 std::function 的 Signature 模板参数中): typedef int Signature(int); // the signature in question typedef std::function<int(i...

29得票3回答
如果lambda表达式返回vector的一个元素,那么它的返回类型是什么?

考虑以下代码片段:#include <iostream> #include <vector> #include <functional> int main() { std::vector<int>v = {0,1,2,3,4,5,6}...

28得票4回答
C++11 可变参数的 std::function 参数

一个名为test的函数以std::function<>作为其参数。template<typename R, typename ...A> void test(std::function<R(A...)> f) { // ... } 但是,如果我执行以...

28得票5回答
在C++中使用“void”模板参数

请看下面的最简示例: using Type1 = std::function<void(void)>; template <typename T> using Type2 = std::function<void(T)>; Type1 whyDoesT...

27得票1回答
在标准下调用std::function<void(Args...)>是否违法?

所有引用均来自N3797。 4/3 [conv] 如果存在一种声明 T t=e; 对于某个虚构的临时变量t,表达式e可以被隐式转换为类型T,那么e就可以被隐式转换为类型T。 这意味着没有任何表达式可以被隐式转换为void,因为对于所有表达式e,void t=e都是非法的。即使...

26得票2回答
通过std::function获得Functor的引用

基本上,我希望有以下语义: #include &lt;functional&gt; #include &lt;iostream&gt; class test { public: void add(std::function&lt;void()&gt; f) { ...

25得票2回答
为什么函数指针可以作为有效的模板参数,而std::function却不行?

我定义了一个名为CallBackAtInit的类模板,其唯一目的是在其初始化(构造函数)时调用一个函数。该函数在模板参数中指定。问题是,模板不接受std::function作为参数,但它们接受函数指针。为什么? 以下是我的代码:#include &lt;iostream&gt; #inclu...

24得票6回答
获取std::function的名称

在下面这个玩具示例中,我想获取函数的名称。该函数本身作为std::function参数给出。在C++中是否有可能获得std::function对象的名称?void printName(std::function&lt;void()&gt; func){ //Need a functio...