问题列表 - 第318078页

为什么 ADL 在依赖类型名上失败?

我注意到get<0>(t)无法解析std::get<0>(t)其参数类型是否依赖于模板参数:

template <typename T>
void foo(T) {
  std::tuple<T> tup{0};
  get<0>(tup) = 1; // error: 'get' was not declared in this scope; did you mean 'std::get'?
}
Run Code Online (Sandbox Code Playgroud)

foo如果不是模板(即如果tup声明为std::tuple<int>)或使用 ,则效果很好using std::get;。难道它不应该在 ADL 通常特别有用的函数模板中工作吗?

c++ argument-dependent-lookup

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

无法使用 openxlsx2 写入工作表

这是我的代表

library(openxlsx2)

wb <- openxlsx2::wb_workbook()
openxlsx2::wb_add_worksheet(wb, "All Courses")

allLines = c("This is the first test", 
             "This is the second test",
             "This is the third test")
openxlsx2::wb_add_data(wb, sheet = "All Courses", allLines, start_col = 1, start_row = 1)
openxlsx2::wb_save(wb, file = "C:/Temp/My xlsx2 Test.xlsx", overwrite = TRUE)
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,我可靠地收到以下错误消息:

openxlsx2::wb_add_data(wb, sheet = "All Courses", allLines, start_col = 1, start_row = 1)
Error in wb$.__enclos_env__$private$get_sheet_index(sheet) : 
  Sheet name(s) not found: all courses
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚这是一个错误还是我做错了什么。在此先感谢您的帮助

托马斯·飞利浦

r xlsx openxlsx

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

在 Java 17 中解析带有两位小数的时间时出错,但在 Java 8 中成功

以下代码片段在 Java 8 中运行没有错误。但是,当我在 Java 17 中运行相同的代码时,它会失败。

import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;

public class Main2 {
    public static void main(String[] args) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH[:mm[:ss[.SSS]]]X");
        OffsetDateTime offSetDateTime = OffsetDateTime.parse("2021-10-09T08:59:00.00Z", formatter);
        System.out.println(offSetDateTime);
    }
}
Run Code Online (Sandbox Code Playgroud)

在 Java 17 上运行时的输出:

Exception in thread "main" java.time.format.DateTimeParseException: Text '2021-10-09T08:59:00.00Z' could not be parsed at index 19
    at java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:2052)
    at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1954)
    at java.base/java.time.OffsetDateTime.parse(OffsetDateTime.java:404)
    at Main2.main(Main2.java:9)
Run Code Online (Sandbox Code Playgroud)

但是,如果我针对 Java 8 运行相同的代码,则会给出以下结果:

2021-10-09T08:59Z
Run Code Online (Sandbox Code Playgroud)

如果我将测试数据从 更改为"2021-10-09T08:59:00.00Z","2021-10-09T08:59:00.000Z"它可以在 Java 17 中运行。您知道 Java 17 中的哪些更改导致它失败吗?

java java-8 java-time java-17

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

我从 BMP 标头获取 ASCII 符号而不是数字

我正在尝试从 .bmp 文件中获取 BITMAPFILEHEADER 部分。我期望看到一些数字,但有 ASCII 符号。如何解决这个问题呢?

std::string path;
std::ifstream file;

path = "C:\\Users\\user\\Desktop\\Emp.bmp";

file.open(path);

if (!file.is_open())
{
    std::cout << "ERROR";
}
else
{
    char fromfile[14];

    file.read(fromfile, 14);

    std::cout << fromfile;
    file.close();
}
Run Code Online (Sandbox Code Playgroud)

我尝试将 ASCII 输出转换为十六进制符号,并且我有正确的数据(它与十六进制编辑器数据匹配),但我不明白为什么我从程序输出中获取 ASCII

c++ bmp

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

如果左侧进程收到 SIGINT,为什么管道右侧会死亡?

我正在尝试将进程日志捕获到文件中,同时进程接收 SIGINT 信号进行调试。

 timeout -s INT 2 ./myprogram 2>&1 | tee /tmp/1
Run Code Online (Sandbox Code Playgroud)

我发现,当我向管道左侧的进程发送 SIGINT 时,右侧进程也收到 SIGINT,这导致tee退出并且日志丢失。这让我感到惊讶。我编写了以下脚本来重现它:

$ timeout -s INT 1 bash -xc 'trap "echo LEFT SIGINT >&2; sleep 1" INT; sleep infinity' | bash -xc 'trap "echo RIGHT SIGINT" INT; sleep infinity'
+ trap 'echo RIGHT SIGINT' INT
+ sleep infinity
+ trap 'echo LEFT SIGINT >&2; sleep 1' INT
+ sleep infinity
++ echo LEFT SIGINT
++ echo RIGHT SIGINT
RIGHT SIGINT
LEFT SIGINT …
Run Code Online (Sandbox Code Playgroud)

bash signals

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

使用 Eval 将变量设置为等于多行字符串

我正在尝试使用 eval 设置多行变量

$ k="A
B
C"

$ echo "$k"
A
B
C

$ eval 'k="1
2
3"'

$ echo "$k"
1
2
3
Run Code Online (Sandbox Code Playgroud)

但我想使用 awk 通过 awk 脚本生成我的变量

$ echo "$k" | awk 'BEGIN{RS="";FS="[ \t]+"}{print "awkV=\""$0"\""}' 
awkV="1
2
3"

$ eval `echo "$k" | awk 'BEGIN{RS="";FS="[ \t]+"}{print "awkV=\""$0"\""}'`
$ echo "$awkV"
1 2 3

$ eval '`echo "$k" | awk 'BEGIN{RS="";FS="[ \t]+"}{print "awkV=\""$0"\""}'`'
-bash: unexpected EOF while looking for matching ``'
-bash: syntax error: unexpected end of file
bash: …
Run Code Online (Sandbox Code Playgroud)

bash awk eval

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

Flutter 像 Headspace 应用程序一样创建动画

想要在flutter中实现类似Headspace应用程序的动画。 在此输入图像描述

flutter flutter-animation

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

一个非常大的数组的大小

为什么这段代码

#include <stdio.h>

int main(void) {
    char big_array[10000000000];
    printf("%d", sizeof(big_array));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

将输出打印为

1410065408
Run Code Online (Sandbox Code Playgroud)

而不是10000000000?

如果原因是由于堆栈内存不够大,那么在什么时候会出现运行时错误而不是分配较小的内存?

c stack sizeof

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

是否可以在 C++ 中制作零分配协程运行时?

在 Rust 中,异步函数不需要在堆上分配。函数async返回编译器生成的结构,您可以在该结构上调用编译器生成的poll方法。异步的设计看起来逻辑清晰。

C++中协程的设计很奇怪。它迫使您在堆上进行分配,因为您没有其他方法可以使用co_return.

(可以创建一个自定义分配器来在堆栈上的缓冲区中进行分配,但这会使代码不必要地复杂化。)

为什么在 C++ 的设计中决定协程返回的对象必须有一个promise_type?

为什么await_ready,,,await_suspend还await_resume不够?

(这看起来很奇怪,这就是强制你进行分配的原因;你不能直接构造一个SomeTask<T>对象(使用三个await_*方法)并返回它。)

我们如何在没有自定义分配器的情况下制作零分配协程?

c++ asynchronous language-design c++20 c++-coroutine

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

Python 中的“集合 if”

Dart 有一个巧妙的功能,称为Collection if。它允许您有条件地在列表文字中包含一个元素。例如:

var nav = ['Home', 'Furniture', 'Plants', if (promoActive) 'Outlet'];
Run Code Online (Sandbox Code Playgroud)

在 Python 中是否有等效的方法可以做到这一点?我能想到的最好的办法是:

nav = ['Home', 'Furniture', 'Plants', *(['Outlet'] if promoActive else [])];
Run Code Online (Sandbox Code Playgroud)

但这很糟糕。有更清楚的事吗?

编辑:要明确的是,我希望它能够在可以使用数组文字的情况下工作。.append()对于这样的情况将会是可怕的:

a = {
  "foo": {
     "bar": [
        ["a"],
        ["b", "c", *(["d"] if foo else []), "e", "f"],
        ...
Run Code Online (Sandbox Code Playgroud)

python

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