小编bur*_*nck的帖子

我可以在对std :: visit的调用中更改std :: variant中的保留类型

以下代码是否会调用未定义的行为?

std::variant<A,B> v = ...;

std::visit([&v](auto& e){
  if constexpr (std::is_same_v<std::remove_reference_t<decltype(e)>,A>)
    e.some_modifying_operation_on_A();
  else {
    int i = e.some_accessor_of_B();
    v = some_function_returning_A(i); 
  }
}, v);
Run Code Online (Sandbox Code Playgroud)

特别是,当变体不包含时A,此代码将重新分配,A同时仍保留对先前持有的type对象的引用B。但是,由于分配后不再使用该引用,因此我觉得代码很好。但是,标准库是否可以以std::visit 上述方式不确定的方式自由实施?

c++ c++17 std-variant

22
推荐指数
1
解决办法
465
查看次数

尝试安装 `genicam` 的诗歌中“无法找到安装候选者” - 如何调试?

我刚刚使用新install-poetry.py脚本在 Windows 10 计算机上安装了诗歌。我刚刚将我的 python 应用程序依赖管理转换为pyproject.tomlwith poetry. 它适用于我的大多数依赖项,但不适用于genicam包,并显示上述Unable to find installation candidates错误消息。安装该软件包pip确实有效。我该如何调试此类问题?我尝试运行poetry install -vvv,但我得到的只是诗歌内部的详细形式的相同堆栈跟踪,没有任何有用的内容添加到简短形式的输出中(特别是没有尝试但失败的索引或网址):

\n
Package operations: 1 install, 0 updates, 0 removals\n\n  \xe2\x80\xa2 Installing genicam (1.1.0)\n\n  RuntimeError\n\n  Unable to find installation candidates for genicam (1.1.0)\n\n  at ~\\AppData\\Roaming\\pypoetry\\venv\\lib\\site-packages\\poetry\\installation\\chooser.py:72 in choose_for\n       68\xe2\x94\x82\n       69\xe2\x94\x82             links.append(link)\n       70\xe2\x94\x82\n       71\xe2\x94\x82         if not links:\n    \xe2\x86\x92  72\xe2\x94\x82             raise RuntimeError(\n       73\xe2\x94\x82                 "Unable to find installation candidates for {}".format(package)\n       74\xe2\x94\x82             )\n       75\xe2\x94\x82\n       76\xe2\x94\x82         # Get the …
Run Code Online (Sandbox Code Playgroud)

python genicam python-poetry

15
推荐指数
1
解决办法
3万
查看次数

使用PyMC3计算最大似然

在某些情况下,我实际上并不对贝叶斯推断的整个后验感兴趣,而只是对最大似然性(或对于适当选择的先验而言,对最大后验概率)感兴趣,并且可能是Hessian。PyMC3具有执行此操作的功能,但find_MAP似乎会根据转换后的先验分布以转换形式返回模型参数。是否有一种简单的方法可以从中获取未转换的值?find_hessian对我来说,输出甚至还不够清楚,但是很有可能在转换后的空间中也是如此。

python statistics pymc3

7
推荐指数
1
解决办法
1245
查看次数

比较一个32位浮点数和一个32位整数而不转换为加倍,当任何一个值太大而不能完全适合另一个类型时

我有一个32位浮点数f(已知是正数),我需要转换为32位无符号整数.它的幅度可能太大而不适合.此外,存在需要一些余量的下游计算.我可以将最大可接受值计算m为32位整数.如果在f <= m数学上如何在受约束的32位机器(ARM M4F)上有效地确定C++ 11 .请注意,这两个值的类型不匹配.以下三种方法各有其问题:

  • static_cast<uint32_t>(f) <= m:我认为如果f不适合32位整数,这会触发未定义的行为
  • f <= static_cast<float>(m):如果m太大而无法准确转换,则转换后的值可能会大于m后续比较会在某些边缘情况下产生错误结果
  • static_cast<double>(f) <= static_cast<double>(m):在数学上是正确的,但需要转换,并使用double,我想避免出于效率原因

当然必须有一种方法可以使用指定的舍入方向直接将整数转换为浮点数,即保证结果不会超出输入的大小.我更喜欢C++ 11标准解决方案,但在最坏的情况下,平台内在函数也可以符合条件.

c++ floating-point precision arm

6
推荐指数
1
解决办法
430
查看次数

导入模块之前的nose-doctest模块夹具

我使用鼻子进行测试收集,我也想使用它的doctest插件.我有一个模块,需要一个夹具才能导入.因此,我不能使用鼻子的模块固定装置,因为它们是从被测模块加载的.有没有办法在模块外部为nose-doctest指定模块夹具?

对于某些用例,一个选项是检测在doctest下运行并在模块的开头应用fixture.我很想知道这个用例的答案.

但是,在某些情况下,这不起作用:当导入因a而失败时SyntaxError,不会运行任何模块代码.在我的例子中,我主要开发的代码兼容python 2和python 3(没有2to3).然而,有一些python 3特定模块,当在python 2下运行时根本不应该由鼻子检查.我最好的选择是什么?

编辑:MWE(针对这种SyntaxError情况)

我有一个包含许多小模块的包,其中一些使用python 3语法.这是包结构:

~/pckg/
  __init__.py
  py3only.py
  ... (other modules)
  tests/
    test_py3only.py
Run Code Online (Sandbox Code Playgroud)

有些测试是作为编写的unittest.TestCase,但我也希望测试文档字符串中的代码示例.~/pckg/__init__.py是空的.

〜/ pckg/py3only.py:

def fancy_py3_func(a:"A function argument annotation (python 3 only syntax)"):
    """ A function using fancy syntax doubling it's input.

    >>> fancy_py3_func(4)
    8
    """
    return a*2
Run Code Online (Sandbox Code Playgroud)

〜/ pckg /测试/ test_py3only.py:

import sys, unittest

def setup_module():
    if sys.version_info[0] < 3:
        raise unittest.SkipTest("py3only unavailable on python "+sys.version)

class TestFancyFunc(unittest.TestCase):
    def test_bruteforce(self):
        from …
Run Code Online (Sandbox Code Playgroud)

python testing doctest nose

5
推荐指数
1
解决办法
418
查看次数

在电子导入器的autoUpdater中信任自定义CA,而无需导入系统

使用GenericHTTPServer提供程序获取更新时,我们如何以编程方式使电子生成器的自动更新信任特定的自定义CA证书?该解决方案不应涉及将证书导入系统,并且应可移植到所有平台:Linux,macOS和Windows。

我既不是node.js也不是电子专家。通过HTTP访问资源似乎有许多不同的API,我不知道自动更新程序使用了哪些API。我尝试了以下操作:

certificate auto-update certificate-authority electron electron-builder

5
推荐指数
0
解决办法
222
查看次数

如何使用“ Electron.net” API 信任来自主进程的电子应用程序的自签名证书?

目标是在电子应用程序的主流程中自定义证书验证,以便在开发和测试条件下与自签名证书和不匹配的主机名一起使用。APIelectron.net提供了提供对象的选项Session,该对象具有setCertificateVerifyProc方法。但是,我使用该方法注册的回调永远不会被调用。

这里有一个相关的问题:如何信任来自电子应用程序的自签名证书? 然而,该问题所接受的答案仅适用于渲染过程。事实上,在主进程上,事件certificate-error从未被发出。

ssl https certificate-authority self-signed electron

5
推荐指数
0
解决办法
1123
查看次数

BLE 连接建立期间的功耗:哪个角色(外设/中央)更高效?

我需要通过 BLE 将测量数据从多个电池供电的传感器收集到壁式供电记录器中。测量间隔为分钟量级。我需要有保证的数据传输,因此传感器无法发送广告数据包中的数据,而是需要建立连接以便可以确认数据传输。当为短期使用而建立连接时,中央角色还是外围角色哪个角色更节能?我看到两种网络配置:

  1. 传感器作为外围设备,记录器作为中心:传感器仅在有新数据时进行通告,然后记录器连接并提取数据。
  2. 传感器作为中心,记录器作为外围设备:记录器不断做广告。当传感器有新数据时,它们会连接到记录器并推送数据。

这两种变体中哪一种可以为传感器节省更多电量?

logging bluetooth-lowenergy

1
推荐指数
1
解决办法
483
查看次数

指向派生类的指针的“static_cast&lt;Base*&gt;(static_cast&lt;void*&gt;(衍生))”何时有效?

对于这个问题,不涉及多态性,即不涉及虚方法,不涉及虚基类。以防万一,我的案子不涉及其中任何一个。

假设我有一个类Derived,它有一个明确的可访问父类型Base,没有多态性(没有虚拟方法,没有虚拟基类),但可能涉及间接和/或多继承。进一步假设我有一个有效的指针Derived *derived (指向类型Derived或其子类的对象)。

在这种情况下,我相信static_cast<Base*>(derived)是有效的(产生有效的可用指针)。Base当和之间的祖先链Derived涉及多重继承时,这static_cast可能意味着指针调整以在实例Base内定位实例Derived。为此,编译器需要知道继承链,在本例中他就是这样做的。但是,如果插入了中间转换void *,则编译器将隐藏该继承链信息。对于哪个继承链来说,这样的静态转换仍然有效?我期望以下之一:

  • 一个都没有?访问static_castfrom void 指针是未定义的行为,除非该指针确实指向确切的类型。
  • 对于所有没有多重继承的链?然后,编译器可以保证Base始终位于Derived- 但标准怎么说?
  • 对于所有链,Base在所有中间多重继承链的第一个父类中可以找到什么?Base也许和的开始Derived仍然匹配?
  • 总是?static_castto void 指针始终可以调整到第一个父级的开头,而static_castfrom void 指针则撤消该调整。但对于多重继承,“第一个父母”不一定是所有父母的父母。

c++ inheritance static-cast upcasting

1
推荐指数
1
解决办法
496
查看次数