新的<=>运算符使编写代码更加方便,并且如果比较算法不平凡,它可以节省一些性能,因为它不需要重复两次才能获得完整的排序。
或者至少当我了解到这一点时我是这么认为的。然而,当我尝试在实践中使用它时,在switch声明中,它不起作用。
此代码无法编译:
#include <iostream>
void compare_values(int x, int y)
{
switch (x <=> y)
{
case std::strong_ordering::less:
std::cout << "is less\n";
break;
case std::strong_ordering::greater:
std::cout << "is greater\n";
break;
case std::strong_ordering::equal:
std::cout << "is equal\n";
break;
}
}
Run Code Online (Sandbox Code Playgroud)
编译器显示错误,提示返回的值<=>不能在 a 中使用switch:
<source>: In function 'void compare_values(int, int)':
<source>:5:15: error: switch quantity not an integer
5 | switch (x <=> y)
| ~~^~~~~
Compiler returned: 1
Run Code Online (Sandbox Code Playgroud)
(活生生的例子)
我猜想在 switch 中使用 …
在我当前的项目中,我有大量的部分,每个部分都有一两行,范围从 2 到 15 列,宽度相等。相同颜色的单元格放置在同一列中。一个section的定位如下图所示:
为了实现上述布局,我使用了 gridbox。我接近解决方案,但第二行总是向左对齐。
.container {
display: grid;
width: 100%;
grid-template-columns: repeat(auto-fit, minmax(0px, 1fr));
gap: 5px 10px;
background-color: steelblue;
}
.field {
background-color: black;
box-shadow: inset 0px 0px 2px #ffffff;
height: 20px;
color: white;
text-align: center;
}
.second-row {
grid-row-start: 2;
}
/* colours */
.colour-black {
background: black;
}
.colour-blue {
background: blue;
}
.colour-yellow {
background: yellow;
}
.colour-red {
background: red;
}
.colour-orange {
background: orange;
}
.colour-purple {
background: purple;
}
.colour-green { …Run Code Online (Sandbox Code Playgroud)尝试使用 next-auth authjs-v5 beta 教程设置 next-auth 并收到此未知操作错误,我无法弄清楚问题是什么,并且该网站也没有提到修复程序,只是说了错误名称,没有其他内容
我的包.json
{
"name": "nextlearn",
"version": "0.1.0",
"private": true,
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint"
},
"dependencies": {
"@auth/core": "^0.26.3",
"@auth/prisma-adapter": "^1.3.3",
"@hookform/resolvers": "^3.3.4",
"@prisma/client": "^5.9.1",
"@radix-ui/react-label": "^2.0.2",
"@radix-ui/react-slot": "^1.0.2",
"bcrypt": "^5.1.1",
"class-variance-authority": "^0.7.0",
"clsx": "^2.1.0",
"lucide-react": "^0.314.0",
"next": "^14.1.0",
"next-auth": "^5.0.0-beta.9",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-hook-form": "^7.49.3",
"react-icons": "^5.0.1",
"tailwind-merge": "^2.2.0",
"tailwindcss-animate": "^1.0.7",
"zod": "^3.22.4"
},
"devDependencies": {
"@types/bcrypt": "^5.0.2",
"@types/node": "^20",
"@types/react": "^18",
"@types/react-dom": …Run Code Online (Sandbox Code Playgroud) 让我们有一个极坐标 df:
df = pl.DataFrame(
{
'date': ['2022-01-01', '2022-01-02', '2022-01-07', '2022-01-17', '2022-03-02', '2022-06-05', '2022-06-07', '2022-07-02'],
'col1': [4, 4, 2, 2, 2, 3, 2, 1],
'col2': [1, 2, 3, 4, 1, 3, 3, 4],
'col3': [2, 3, 4, 4, 3, 2, 2, 1]
}
)
Run Code Online (Sandbox Code Playgroud)
| 日期 | 第 1 列 | 列2 | 第 3 列 |
|---|---|---|---|
| 2022-01-01 | 1 | 1 | 2 |
| 2022-01-02 | 1 | 2 | 3 |
| 2022-01-07 | 2 | 3 | 4 |
| 2022-01-17 | 2 | 4 | 1 |
| 2022-03-02 | 3 | 1 | 3 |
| 2022-06-05 | 3 | 2 | 2 |
| 2022-06-07 | 4 | 3 | 4 … |
我正在向一个包添加一个功能,该功能可以选择使用DBIish. 我想编写一些单元测试以确保功能正常工作。但是,DBIish它应该是一个可选的依赖项,这意味着您不需要它来安装或使用该包。DBIish如果用户没有安装,如何跳过测试DBIish?
就像是:
{
require ::('DBIish');
CATCH {
default {
skip-testing;
}
}
}
Run Code Online (Sandbox Code Playgroud)
...将是理想的,但可选的测试标志也可以工作,但我似乎找不到有关该主题的任何文档。
相关问题:
#include <type_traits>
#include <vector>
struct A {
A();
};
static_assert(std::is_convertible_v<double, A> == false);
static_assert(std::is_convertible_v<A, double> == false);
void func(std::vector<double> values);
void func(std::vector<A> as);
int main() {
func({ 4.2 });
}
Run Code Online (Sandbox Code Playgroud)
显然,double和A不能相互隐式转换。所以我觉得void func(std::vector<double>)应该叫。
但不同编译器的结果是不同的: https://godbolt.org/z/c1hW47f4c
GCC 无法编译:
<source>: In function 'int main()':
<source>:14:9: error: call of overloaded 'func(<brace-enclosed initializer list>)' is ambiguous
14 | func({ 4.2 });
| ~~~~^~~~~~~~~
<source>:10:6: note: candidate: 'void func(std::vector<double>)'
10 | void func(std::vector<double> …Run Code Online (Sandbox Code Playgroud) 我正在用现代C++20编写我的项目。这个应用程序就像图形模式下的终端/控制台,您可以在其中输入带有各自参数的命令,终端将识别第一个单词,如果在其内部映射中找到它,它会调用映射函数(命令本身) 。这很好用。但现在,我意识到有些命令需要用户交互。例如,如果我想从MS-DOS重新创建del命令,并且用户键入,该命令将需要从键盘获取一个字符(表示是,表示否)。其他一些命令将要求用户键入整个字符串。我怎样才能做到这一点?我正在考虑将我的命令实现为协程,这样我就可以暂停执行,让终端知道我想要单个字符或完整字符串,然后恢复。但我发现协程有点复杂。到目前为止,我有这段代码del *.bak /pyn
enum class e_command_input { SINGLE_CHAR, STRING };
class OS_Command
{
public:
// Forward declaration
struct promise_type;
using t_handle = std::coroutine_handle<promise_type>;
struct promise_type
{
// Creates the command
auto get_return_object() -> OS_Command
{
return OS_Command{ t_handle::from_promise(*this) };
}
auto initial_suspend() -> std::suspend_always
{
cout << " Command starts running" << endl;
return {};
}
auto final_suspend() noexcept -> std::suspend_always
{
cout << " Command finishes …Run Code Online (Sandbox Code Playgroud) 此 pop 方法需要一个复制构造函数。但我不想拥有这个。我希望不调用该项目的构造函数或移动构造函数。我必须如何实施它?
auto pop() {
std::unique_lock<std::mutex> lock(mutex_);
cond_.wait(lock, [this]() {return queue_.empty() == false; });
T& item = queue_.front();
queue_.pop();
return item;
}
Run Code Online (Sandbox Code Playgroud)
T& item = queue_.front() 在编译器错误消息之后需要一个复制构造函数。
我有一个带有 columns 的极坐标数据框a_0, a_1, a_2, b_0, b_1, b_2。我想将其转换为更长更薄的数据框(3 x 行,但只有 2 列a和b),因此a包含a_0[0], a_1[0], a_2[0], a_0[1], a_1[1], a_2[1],...和 相同b。我怎样才能做到这一点?
我们正在构建一个针对 Ubuntu 18.04 LTS 和所有更高版本的 GTK3 应用程序。但是,当我们在 Ubuntu 20.04 版本中构建应用程序时,该应用程序无法在较旧的 Ubuntu 版本上运行。它说
libc.so.6:找不到版本“GLIBC_2.31”(.source 需要)
但如果我在 Ubuntu 18.04 上构建一个应用程序,它将适用于所有后续的 Ubuntu 版本。Ubuntu 18.04 默认情况下有 GLIBC 版本 2.27,该版本适用于所有后续版本。
那么有什么方法可以告诉我的应用程序,该应用程序是使用 GLIBC 2.27 构建的,无论构建该应用程序的操作系统是什么版本?有什么方法可以在构建过程中将 GLIBC 版本的信息提供给应用程序吗?