问题标签 [stdapply]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3278 浏览

c++ - 使用 std::apply 应用可变参数函数

是否可以使用 std::apply 将可变参数函数应用于元组?

例如,以下代码适用于 GCC 6.2.1:

但是,如果我尝试应用可变参数函数:

编译器抱怨它不能推导出vprint. 好的,让我们明确地写出来:

现在编译器最终会出现一些暴露标准库内部的晦涩错误。

我在 C++11 中编写了自己的实现,std::apply我理解为什么它不能推断可变参数函数模板的参数。但是,从理论上讲std::apply拥有该扣除所需的所有信息。

那么可变参数函数的应用是 GCC6 中尚未实现的功能吗?兼容 C++17 的编译器会允许这样的应用程序吗?如果不是,它们是否允许应用实例化的可变参数模板函数,例如vprint<std::string, std::string>

0 投票
3 回答
737 浏览

c++ - std::apply and constant expression?

I tried code below in Wandbox:

and the compiler told me that args... are not constant expression. What's wrong?

0 投票
2 回答
504 浏览

c++ - 没有显式 std::forward 的 std::apply 参数如何应用?

考虑可能的实现std::apply

为什么在调用f带有参数元组的函数()传递(t)时,我们不需要在实现std::forward中对元组的每个元素std::get<I>(std::forward<Tuple>(t))...执行?

0 投票
1 回答
228 浏览

c++ - 完美转发复制的 std::tuple

我需要一点帮助。我需要以特定的方式完善一个元组。想象一下

打包的任务稍后将在不同的线程上执行,但是当我调用 apply 时,我需要“可调用”来让它的参数从元组扩展并转发,就像它们在package_task函数中传递的一样。我不能使用forward_as_tuple,因为我正在复制/移动参数和稍后执行的可调用对象。我需要类似的东西

任何想法,将不胜感激。

0 投票
2 回答
1142 浏览

c++ - 将 std::apply 与可变参数包一起使用

我正在尝试创建一个通用类,它采用一组类型,将它们存储在一个元组中,并且可以对它们应用一个函数。

到目前为止,我尝试的是以下内容:

在 D 上调用 base_function 时,我希望 apply 在 B 类和 C 类的 base_function 上调用。但是编译器会生成以下错误:

错误:没有匹配的函数调用
__invoke(A<T>::base_function() [with T = {B, C}]::<lambda(auto:1)>, std::__tuple_element_t<0, std::tuple<B, C> >&, std::__tuple_element_t<1, std::tuple<B, C> >&)

0 投票
1 回答
123 浏览

c++ - std::get 不转发 std::apply 的右值引用

我想知道为什么在使用元组中的引用类型时std::apply不转发rvalue-reference(参见Live):

造成这种情况的根本原因是std::get参考折叠规则。std::apply如果在内部使用它不是更有意义吗non_std_get

这将导致一个完美的前锋

0 投票
2 回答
1113 浏览

c++ - std::visit 带有重载自由函数而不是函数对象的 std::variant

在 C++17 中是否有一种简单的方法来 std::visit 具有重载自由函数的变体,或者我必须使用具有重载调用运算符的对象?

换句话说,是否可以添加一些简单的东西以使以下//ERROR!行编译为与该行功能相同//OK!

0 投票
1 回答
447 浏览

c++ - C++:使用 std::apply 在 2 部分中迭代元组:直到应用 lambda 的索引,然后在应用不同 lambda 的索引之后

如果我想使用但不将一个函数应用于整个事物来遍历一个元组std::apply,我该如何分离元组,即将一个函数应用于第一个n值,另一个应用于它之后的所有值?

some_values将是一个元组,它可以具有任何长度和类型,并且length_of_first_part(可能命名得不那么冗长)在编译时就知道了。

0 投票
1 回答
311 浏览

c++ - 如何在 C++ 包扩展中包含多行或语句?

假设我有一些像下面这样的简单代码,它只打印一个元组中的所有值并跟踪当前迭代。

例如,如果我想仅在索引大于 2 时打印元组值,我该怎么做?我不能简单地if在因为语句之前放一个cout不允许([cquery] expected expression在 repl.it 上)。

更一般地说,我怎样才能在包扩展中执行多行代码或语句之类的事情?

在内部使用 lambda 可以工作,例如

但我无法想象这是最有效(或预期)的解决方案。

0 投票
0 回答
239 浏览

c++ - 如何在 C++11 中实现 std::apply 之类的东西?

有没有办法std::apply在 c++11 中实现?

我有一个std::tuple<Args...> myTuple和一个std::function<void(const Args&...)> myFunction

如何在 C++11 中调用myFunction并将其作为参数的内容传递给它?myTuple