问题标签 [invocable]

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 投票
2 回答
656 浏览

c++ - 我们如何测试是否可以使用纯右值调用某种类型的表达式?

中,我们有花哨的is_invocable新纯右值和花哨的新纯右值,它们并不是真正的值。

这允许您创建一个对象,而不必先从逻辑上构造它,然后省略构造。

我遇到了一个问题,使用std::is_invocable来测试你是否可以调用某些东西,并且prvalue规则似乎发生冲突:

现在我们可以问是否f可以使用类型的纯右值调用no_move

std::is_invocable< decltype(&f), no_move >不起作用,因为它使用std::declval<no_move>()which is an x​​value like no_move&&not a prvalue of type no_move

中这是相同的,但保证省略使一些函数可以用 xvalue(即“ T&&”)调用,而另一些函数可以用 prvalues 类型调用T

是否有替代方案,或者我们必须发明自己的特征来处理这种情况?

(在一个std::declval<T>返回T而不是 ,T&&的理论世界中is_invocable,我相信会做正确的事情)。

0 投票
1 回答
1399 浏览

salesforce - 无法从 Salesforce Einstein 机器人调用操作

我正在沙盒中开发我的第一个 Salesforce Einstein Bot。该机器人运行良好,并按预期浏览多个对话框,直到我尝试调用操作。如果我尝试调用任何操作,无论多么简单,机器人都会自动结束聊天,即使在操作调用之后对话框中有更多步骤。我什至简化了可调用的方法来简单地接受一个字符串列表并且什么都不返回。该方法实际上什么都不做,我可以毫无问题地从 Process Builder 调用它。出于某种原因,在机器人中它会使聊天崩溃。我已经从头开始删除并重建了机器人,结果相同。

关于我可能遗漏的任何想法或建议?关于我还能检查什么的建议?

0 投票
1 回答
1356 浏览

c++ - is_invocable 具有任意函数参数类型

有没有办法std::is_invocable与任意函数参数类型一起使用,例如:std::is_invocable<Function, auto>. 这个想法是检查是否Function可以接受 1 个参数,而不管参数的类型。对于用例,请考虑两个 lambda:auto lambda1 = [](auto x) {...}auto lambda2 = [](auto x, auto y) {...}和一个更高阶的模板函数:

!std::is_invocable<Function, auto, auto>::value第一种情况下是为了防止重载函数的歧义(也就是说,在这种情况下,首选的特化是在歧义的情况下的 2 参数)。

请注意,我知道auto在这种情况下不能这样使用。我在问是否有办法实现这种行为(至少部分)。

0 投票
1 回答
1567 浏览

c++ - 为什么 std::invocable 概念会阻止此代码编译

我不明白为什么std::invocable在以下代码中 lambda 和函数都没有被识别为兼容类型:

我正在使用-std=c++2a启用标志的 GCC 中继。

0 投票
1 回答
36 浏览

salesforce - 有没有办法将 Apex Select 语句转换为字符串

我已经正确更新了所有权限集,因为我可以在 select 语句所在的位置硬编码一个字符串“Test”,但是当我输入 select 语句时,我的聊天机器人会立即关闭。有人可以快速浏览一下吗?我正在尝试测试我是否可以获取电子邮件地址、搜索联系人对象并返回 appDecision(自定义字段)

}

0 投票
1 回答
219 浏览

c++ - 带有模板成员函数和 std::invocable 的 C++20 概念中的错误

我正在尝试使用 C++20 概念和Eigen 库,但发生了意外行为。具体来说,考虑以下概念,要求类型可以用Eigen::Matrix<double, -1, 1>>对象或对象调用Eigen::Matrix<char, -1, 1>>

然后,查看以下结构中的注释行 (*):

请注意,该类Foo不满足 的要求,FooConcept因为它不能用Eigen::Matrix<char, -1, 1>参数调用。的确:

打印0。但是,当我切换行注释 (*) 时,即当operator()是模板时,相同的代码会奇怪地打印1. 这是一个错误吗?我使用 Clang 12.0.1 和 GCC 11.1.0 在 Visual Studio Code 上编译代码时得到了这些结果。感谢您提供任何帮助!

PS:线

打印1,但Eigen::Matrix<char, -1, 1>不能将对象隐式转换为Eigen::Matrix<float, -1, 1>. 这是另一个错误吗?这是否与上述问题相关?


编辑1:我注意到通过定义

FooImplicit结构实际上满足FooConcept,如果替换为 ,也会发生同样char的情况double。这看起来与两种 Eigen 类型的可转换性有关——见 PS

如何在不允许隐式转换的情况下表达我想要的约束?也就是说,FooConcept必须只允许operator() 至少重载两次的类,一次 withEigen::Matrix<double, -1, 1>和一次 with Eigen::Matrix<char, -1, 1>。这可以做到吗?

另外,如果我定义函数

我尝试将其称为func(Foo());保留行 (*) 注释,我收到以下编译错误:

这是因为编译器无法明确选择要调用的重载吗?如果是,为什么错误消息不更明确?对我来说,它看起来就像编译器注意到它Foo有两个成员函数,一个是正确的,而另一个不是。


编辑2:我设法回答了这篇文章中的一半问题。但是,我仍然对我从编译器得到的错误信息感到好奇。

0 投票
3 回答
101 浏览

c++ - 推导可调用参数类型时如何指定C++可调用概念

我从模板函数调用模板 lambda,导出 lambda 参数类型。如果 lambda 的类型为 auto,则它可以工作: https ://godbolt.org/z/WYxj5G8vx

我想使用std::invocable概念来专门化 , 的auto fun参数testf2,而不是std::array<std::uint8_t, N>作为参数的可调用对象。

当我尝试使用 gcc11.2 或 clang13

我得到错误:

候选模板被忽略:无法推断模板参数 'S' int testf2(T, std::invocable<std::array<uint8_t, S>> auto fun) {

我不明白为什么编译器可以在仅使用 auto 时推断类型,但不能使用约束概念。

在这种情况下使用概念的正确方法是什么?

这是代码的简化版本,实际上是的签名testf2testf2(auto fun, ARGS... args)数组的大小是根据参数包类型计算的。

============ 编辑 03/03/2022 ==================

感谢您的正确答案,但我过度简化了代码和问题,所以我得到了错误问题的正确答案。

您需要更多上下文,我使用 MCU,并且想要创建一个函数来抽象某种 spi、i2c、modbus 等事务,其中一个将缓冲区发送到从外设并接收缓冲区作为响应。该函数计算写入和读取缓冲区长度,序列化(如果需要,进行字节序转换),根据传输机制调用 lambda 来执行实际事务,反序列化并返回。因此,缓冲区长度不能按照建议使用 (sizeof(Ts) + ...) 计算。

我做了一个更现实的例子:live example

问题还是一样:有没有办法在函数 testf2 的 auto fun 参数上添加约束

0 投票
0 回答
2 浏览

apex - 如何从调用可调用 Apex 的平台事件触发流中剥离用户上下文?

我有一个可调用的操作,通过 REST 调用向 Twilio 发送 SMS 消息。为此,它会访问自定义设置中的 Twilio 凭据。效果很好。

现在,我想创建一个由平台事件触发的流,该事件在有传入文本消息(通过 REST 站点进入组织)时触发。即使可调用的 apex 是由平台事件 → 系统上下文触发的,它也无法访问自定义设置中的凭据,因为存在 Rest Site Guest User 上下文的光环,并且您永远无法授予他们访问自定义设置的权限.

任何想法如何真正清除来宾用户上下文?