小编kiv*_*ple的帖子

动态创建函数的源映射

JavaScript允许您在运行时使用新的Function(...)或eval创建新函数。以这种方式创建的函数是否可以设置类似于源映射的内容?也就是说,设置据称从中加载源文件的名称,以及不同的源行号。

如果没有通用的解决方案,那么可能会有针对特定JavaScript引擎的特定解决方案。

javascript

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

将 std::string_view 转换为 float

我正在尝试使用 C++20 编译器转换std::string_view为浮点数,而无需中间转换(这将导致额外的堆分配)。std::string

#include <iostream>
#include <charconv>

int main() {
    std::string_view s = "123.4";
    float x;
    std::from_chars(s.data(), s.data() + s.size(), x);
        
    std::cout << x << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

但我无法编译这段代码:

error: no matching function for call to 'from_chars(std::basic_string_view<char>::const_pointer, std::basic_string_view<char>::const_pointer, float&)'
Run Code Online (Sandbox Code Playgroud)

我做错了什么?

c++

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

从另一个 gradle 任务运行 gradle 测试

我创建了使用 gradle 构建系统的 Spring Boot 项目。我想通过自定义 gradle 任务运行一个单独的测试类,以便能够在其他任务中依赖它。现在我可以用这段代码来做到这一点:

import org.apache.tools.ant.taskdefs.condition.Os

def gradleWrapper = Os.isFamily(Os.FAMILY_WINDOWS) ? 'gradlew.bat' : './gradlew'

task runMyTest(type: Exec) {
    workingDir "$rootDir"
    commandLine gradleWrapper, ':test', '--tests', 'com.example.MyTest'
}
Run Code Online (Sandbox Code Playgroud)

显然,这不是一个非常漂亮的解决方案,因为它启动了一个额外的 Gradle 守护进程。我之前尝试过另一个解决方案:

task runMyTest(type: Test, dependsOn: testClasses) {
    include 'com.example.MyTest'
}
Run Code Online (Sandbox Code Playgroud)

但它不起作用(不执行我的测试类)。

UPD:我尝试了另一种解决方案:

task runMyTest(type: Test) {
    filter {
        includeTestsMatching "com.example.MyTest"
    }
}
Run Code Online (Sandbox Code Playgroud)

它失败并显示以下错误消息:

Execution failed for task ':runMyTest'.
> No tests found for given includes: [com.example.MyTest](filter.includeTestsMatching)
Run Code Online (Sandbox Code Playgroud)

但是,显然,我的测试存在,因为通过命令行运行测试会产生正确的结果。

UPD2:我错过了useJUnitPlatform()我的测试任务。它在默认测试任务中(由 Spring Boot 初始值设定项写入我的 build.gradle),但不在自定义任务中。

junit spring gradle

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

WinAPI:线程本地存储清理

TlsAlloc在 WinAPI 中,您可以使用、TlsGetValue和TlsSetValue等函数创建和访问线程本地存储TlsFree。API 假设您将在线程本地存储中存储指针(当然您可以存储size_t转换为指针的整数,但通常我们希望存储更多信息)。因此,可能该内存将由使用该数据的每个线程分配。但问题是如何在线程退出时释放这些内存。

在 pthreads 中,您有一个可选的函数destructor参数pthread_key_create(pthreads 版本TlsAlloc)。但在原始 WinAPI 中TlsAlloc不提供这样的选项。如何仅使用 WinAPI 和纯 C 实现线程本地存储的自定义析构函数(因此没有现代 C++ 线程本地存储支持编译器级别的对象析构函数)?

我正在编写一个普通程序,而不是一个 DLL,所以我不关心“DLL 在程序退出之前卸载,因此析构函数代码变得不可用”的极端情况。我想,我正在寻找一个类似于 的函数atexit,但在线程级别。

c winapi multithreading

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

标签 统计

c ×1

c++ ×1

gradle ×1

javascript ×1

junit ×1

multithreading ×1

spring ×1

winapi ×1