问题标签 [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.
c++ - std::apply 是否应该仅适用于 std::tuple?
的函数签名std::apply
不将模板参数限制为Tuple
的特化std::tuple
,因此它仍然可以接受定义(godbolt)的类似元组的对象:std::tuple_size_v
但是[tuple.apply]std::apply
中的描述是:
20.5.5 调用带有
tuple
参数的函数
这是否意味着应用于std::apply
对象以外的对象std::tuple
是未定义的行为?
c++ - 在不知道类型的情况下初始化元组中的智能指针
我有一个需要初始化的智能指针元组(作为类模板的成员)。我使用 std::apply 在其他地方迭代元组,但是如何在不知道它们的类型的情况下用新对象初始化它们?用调试器运行下面的代码告诉我元组中的元素之后仍然是“空的”。我在这里做错了什么?
c++ - 无法在用户定义的类型上使用 std::apply
在为我正在处理的某个项目实现一个compressed_tuple
类时,我遇到了以下问题:我似乎无法将这种类型的实例传递给 std::apply,尽管这应该可以根据:https:// en.cppreference.com/w/cpp/utility/apply。
我使用以下片段( godbolt )很容易地重现了这个问题:
当我尝试编译这段代码时,它似乎找不到std::get
我定义的重载,即使它们应该完全匹配。相反,它尝试匹配所有其他重载(std::get(pair<T, U>)、std::get(array<...>) 等),甚至没有提及我的重载。我在所有三个主要编译器(MSVC、Clang、GCC)中都遇到了一致的错误。
所以我的问题是这是否是预期的行为,并且根本不可能std::apply
与用户定义的类型一起使用?有解决方法吗?
c++ - 在类方法上使用 std::apply
我正在尝试编译以下内容(g++-11.2,C++20),但我得到:
代码:
c++ - 通用包装对象的成员函数以修改返回类型
版本限制:C++17。
我正在尝试创建一种类型,该类型能够接受任何类型的可调用对象并包装其成员函数之一(在本例中为operator()
)以采用相同的参数,但修改(强制转换)返回类型。一个例子如下:
ReturnConverter
可以获取一个对象并覆盖该对象operator()
以将它返回的任何内容转换为Ret
.
问题在于表达包装函数的参数类型 - 它们应该与Callable::operator()
. 使用可变参数模板std::forward
不能满足这个目标,因为它会修改函数的签名(operator()
现在变成了以前没有的模板)。
我如何表达argsof
我上面强调的运算符?
动机:我想修改本文std::visit
中演示的重载技术,以便能够从多个 lambda 仿函数中指定所需的返回类型,这样我就不必严格匹配每个 lambda 中的返回类型,例如:
有了上面的改变,我就可以写出类似的东西auto stringify = overload<std::string>(...);