小编jor*_*gen的帖子

将std :: __ cxx11 :: string转换为std :: string

我使用的是c ++ 11,还有一些没有为它配置的库,需要一些类型转换.特别是我需要一种方法转换std::__cxx11::string为常规std::string,但谷歌搜索我找不到一种方法来做到这一点,并放在(string)前面是行不通的.

如果我不转换,我会得到这样的链接器错误:

undefined reference to `H5::CompType::insertMember(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long, H5::DataType const&) const'
Run Code Online (Sandbox Code Playgroud)

c++ string types std c++11

66
推荐指数
4
解决办法
8万
查看次数

编译包含extern"C"的程序

我正在尝试使用makefile来编译其他人编写的程序,使用cygwin.我收到很多错误信息,其中很多都抱怨error: template with C linkage.

在搜索了一下后,似乎问题与之相关extern "C".该行包含在文件cygwin/usr/include/pthread.h中,该文件包含#include < pthread.h >在其中一个标题中.当我删除此行时,大多数错误消息都会消失.但是还有一些,有以​​下几种:

/usr/include/pthread.h:67:5: error: previous declaration of ‘int pthread_atfork(void (*  )(),void ( *)(), void ( *)())’ with ‘C++’ linkage

/usr/include/sys/unistd.h:136:5: error: conflicts with new declaration with ‘C’ linkage
Run Code Online (Sandbox Code Playgroud)

有谁知道如何解决这一问题?我很乐意坐下来详细了解所有这些东西,但我没有时间需要这个程序运行..

c c++ header-files extern

9
推荐指数
2
解决办法
1万
查看次数

将测试覆盖率与 HPC 相结合

我发现 HPC 确实令人困惑,即使在阅读了一些解释并进行了相当多的尝试之后也是如此。

我有一个库HML,以及两个测试套件fileio-testtypes-test,使用HTF(我计划转移到tasty)。我想运行这两个测试,然后查看两个测试在库中的综合覆盖率。

目前我使用构建库

cabal configure --enable-coverage
cabal build
Run Code Online (Sandbox Code Playgroud)

并使用运行测试

cabal configure --enable-coverage --enable-tests
cabal build
cabal test

hpc report --hpc-dir dist/hpc/vanilla/mix/fileio-test dist/hpc/vanilla/tix/fileio-test/fileio-test.tix
Run Code Online (Sandbox Code Playgroud)

这向我展示了一些报道,但不是正确的。我认为它显示了覆盖率,但仅来自其中一项测试,并且还包括测试本身的覆盖率。

我尝试使用

--hpc-dir dist/hpc/vanilla/mix/HML-0.1.0.0
Run Code Online (Sandbox Code Playgroud)

但是 HPC 抱怨它找不到它需要的模块文件。我还尝试将两个测试的覆盖范围结合起来,但没有成功。

有什么指点吗?

haskell code-coverage haskell-program-coverage

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

将c ++宏重写为函数等

我有一个宏,我使用了很多,受到另一个问题的启发:

#define to_string(x) dynamic_cast<ostringstream &> (( ostringstream() << setprecision(4) << dec << x )).str()
Run Code Online (Sandbox Code Playgroud)

这个非常方便,例如在使用字符串输入的函数时:

some_function(to_string("The int is " << my_int));
Run Code Online (Sandbox Code Playgroud)

但是我被告知在C++中使用宏是不好的做法,事实上我在上面的不同编译器上工作时遇到了问题.有没有办法把它写成另一种结构,例如一个函数,它将具有相同的多功能性?

c++ macros conventions function

6
推荐指数
2
解决办法
165
查看次数

查询覆盖了Apollo缓存中的缺少字段

我遇到一种情况,有时我想查询包含几个字段的许多对象的列表,有时只查询一个包含很多字段的对象。例如,请考虑以下两个查询:

我不想在第一个查询中请求多余的字段,因为这将导致请求中包含大量数据(否则,我可以使字段相同,例如,使用a来fragment解决我的问题)。

问题是:存储在缓存中的数据已根据__typename和进行规范化和存储id。这意味着如果查询相同,则查询或查询的原子将相互覆盖。因此,如果第二个查询最后发生,则数据库中的项目没有name与第一个查询关联的组件所必需的字段。

最简单的解决方案就是也要name在第二个查询中提出要求。问题在于,这似乎很脆弱且容易出错。例如,一个人可能创建了第三个查询,却忘记了在name那里查询。

另一个选择是使它们具有不同__typename的,即在后端区分它们。但这似乎是人为的。这些查询实际上是在处理相同类型的对象。

有没有规范的方法可以解决这个问题?

apollo graphql react-apollo

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

使用 React 钩子时事件侦听器功能发生变化

我有一个组件,它通过addEventListener和在多个地方使用事件侦听器removeEventListener。使用像这样的组件方法是不够的onMouseMove因为我还需要检测组件外部的事件。

我在组件中使用钩子,其中几个在末尾有依赖数组,特别是useCallback(eventFunction, dependencies)与侦听器一起使用的事件函数。依赖项通常是使用声明的有状态变量useState.

据我所知,函数的身份在 中很重要add/remove EventListener,因此如果函数在两者之间发生变化,它就不起作用。起初我尝试管理钩子,以便事件函数不会改变addremove但是随着函数对状态的依赖,这很快变得笨拙。

所以最后我想出了以下模式:由于 setter 函数(到 的第二个输入参数useState)获取当前状态作为参数,我可以拥有在第一次渲染后永远不会改变的事件函数(我们是否仍然称此挂载?) 但仍然可以访问最新的有状态变量。一个例子:

import React, { useCallback, useEffect, useState } from 'react';

const Component = () => {
  const [state, setState] = useState(null);

  const handleMouseMove = useCallback(() => {
    setState((currentState) => {
      // ... do something that involves currentState ...
      return currentState;
    });
  }, []);

  useEffect(() => {
    window.addEventListener('mousemove', handleMouseMove);
    return () => { …
Run Code Online (Sandbox Code Playgroud)

javascript addeventlistener reactjs react-hooks usecallback

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

Draft-js:使用不可编辑的实体组件丢失光标

我有一个编辑器,它应该有带有 props 的实体name, color, start, end。在编辑器中,由start和表示的位置中的文本end将由 替代name,并将由带有 的自定义组件呈现contentEditable=false

这通常适用于 Draftjs,但有几个问题:

  • 当用键盘箭头移动光标时,实体被跳过,这很好。但是,当一个实体位于输入的最后并且我尝试向右移动经过它时(仅使用右箭头或使用选项或 cmd + 右),光标消失并且当我再次向左移动时不会回来。
  • 如果我向右转到实体的左侧并按 shift + option + 向右箭头,则会按预期选择该实体。但是如果我再按向左箭头,光标也会丢失。

我可以通过确保在最后一个实体之后总是有一个空格来解决这个问题,但这似乎很棘手,并且可能有边缘情况。

另一种选择是不使用contentEditable=false,但这会给我的实际应用程序带来其他问题,它有一个更复杂的实体组件,包括下拉列表,我将不得不手动确保用户无法更改实体内的文本等。

以下是该问题的重现:https : //codesandbox.io/s/competent-surf-st77i

有任何想法吗?

contenteditable keyboard-navigation reactjs draftjs

6
推荐指数
0
解决办法
539
查看次数

反应测试库:由于输入而发生的变化

我正在尝试测试组件是否由于输入元素的变化而更新。我使用fireEvent.change()-function,然后如果我检查使用getByPlaceholderText它发现的节点的值已按预期进行了更新。但是我看不到react组件本身的变化。

这可能是因为更改直到重新渲染才发生。我将如何测试呢?react-testing-library rerender似乎是“从头开始”启动组件(即没有新的输入值),却waitForElement从不找到它在等待什么。

这是组件TestForm.js:

import React from 'react';
import { withState } from 'recompose';

const initialInputValue = 'initialInputValue';

const TestForm = ({ inputValue, setInputValue }) => (
  <>
    {console.log('inputValue', inputValue)}
    <input value={inputValue} onChange={(e) => setInputValue(e.target.value)} placeholder="placeholder" />
    {inputValue !== initialInputValue && <div>Input has changed</div>}
  </>
);

export default withState('inputValue', 'setInputValue', initialInputValue)(TestForm);
Run Code Online (Sandbox Code Playgroud)

这是测试,使用npx jest test.js以下命令运行:

import React from 'react';
import { cleanup, fireEvent, render, waitForElement } from 'react-testing-library';

import TestForm from './TestForm'; …
Run Code Online (Sandbox Code Playgroud)

javascript unit-testing reactjs react-testing-library

5
推荐指数
2
解决办法
3613
查看次数

与纽约和剧作家零报道

我正在努力使用 Playwright 正确设置报道。它报告所有文件的覆盖率均为 0(测试文件本身除外,如果我包含它们)。

我从https://playwright.dev/docs/api/class-coveragehttps://github.com/bgotink/playwright-coverage/blob/main/src/fixtures.ts中获得灵感。我们的项目是一个单一存储库,其中文件夹中的测试e2e-tests/在其他相邻文件夹中包含的服务器上运行端到端测试,例如frontend/.

page当前设置在每个测试文件中使用如下所示的固定装置:

// frontend.spec.ts
import { test, expect } from "../fixtures";

test("something", ({ page ) => {
    // Do test stuff with page
});
Run Code Online (Sandbox Code Playgroud)

其中夹具定义为

// fixtures/page.ts
import { Page, TestInfo } from "@playwright/test";

const pageWithCoverage = async (
  { page, browserName }: { page: Page; browserName: string },
  use: (page: Page) => Promise<void>,
  testInfo: TestInfo
) => {
  if (!page.coverage) throw new Error(`Could not collect coverage with …
Run Code Online (Sandbox Code Playgroud)

testing code-coverage v8 nyc playwright

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

npm 工作区中不同版本的 React

我们希望在同一工作区的两个 npm 包中拥有一个具有不同版本的 React 的工作区,因为其中一个包的依赖项尚未与 v18 兼容。但是,如果不将其中一个版本提升到根级别,我们就无法执行此操作,从而导致另一个包中的应用程序出现问题。

\n

至少我认为这就是正在发生的事情。简单的再现如下:

\n
    \n
  • 创建一个包含两个包的新 npm 工作区,packages/a并且packages/b;根package.json包括workspaces: ["packages/*"]
  • \n
  • 使用以下命令在每个工作区包中创建一个新应用程序create-react-app
  • \n
  • a通过编辑其工作区 \xc2\xa0down 中的版本将其降级为 17package.json
  • \n
  • 在每个app中添加一个hook,如果同时运行两个版本就会报错
  • \n
  • 删除所有node_modules文件夹,删除所有package-lock.json文件,npm i在根文件夹下运行
  • \n
  • 启动这两个应用程序。这会导致钩子出现“react 的多个版本”错误。检查node_modules根级别的文件夹,我们发现它包含 React 版本之一
  • \n
  • 我们还尝试npm i分别在每个包中运行,得到相同的结果
  • \n
\n

此外,我们尝试创建类似的设置,但没有完整的应用程序,仅在两者中安装(不同版本的) react\xc2\xa0 ;react-dom根级别node_modules\xc2\xa0 仍然包含其中之一。

\n

最后我们尝试使用--legacy-bundling,但没能成功;我们也不确定这是否值得。

\n

有没有办法让工作区包含两个不同版本的 React?

\n

javascript version npm reactjs npm-workspaces

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