尽管进行了数天的研究,但我似乎找不到一种可靠的方法来在辅助 GPU 上以编程方式创建 GL[ES] 上下文。例如,在我的笔记本电脑上,我有英特尔 GPU 驱动面板,还有一个辅助 NVIDIA 卡没有连接到任何东西。 optirun
并primusrun
让我在NVIDIA显卡上运行,但我无法检测到英特尔GPU。我也不想要求更改 xorg.conf 来添加虚拟显示。
我尝试了许多扩展,但似乎没有一个可以正常工作:
glXEnumerateVideoDevicesNV
返回 0 个设备。eglQueryDevicesEXT
返回 0 个设备。eglGetPlatformDisplay
仅适用于主面板并为我提供英特尔上下文我很乐意弄脏我的手,例如滚动我自己的装载机,但我似乎找不到任何关于从哪里开始的文档。我已经查看了源代码,optirun
但它似乎只是在进行重定向。显然,相当于 Windows 的东西IDXGIFactory::EnumAdapters
是理想的,但我对任何不需要额外系统配置的东西都很好。
我试图返回一个std::tuple
包含不可复制构造类型的元素的。这似乎阻止了我使用默认的类构造函数构造元组。例如,要返回一个包含的元组Foo
,foo
必须创建一个实例并创建std::move
d:
class Foo {
public:
Foo(const Foo&) = delete;
Foo(Foo&&) = default;
int x;
};
tuple<int, Foo> MakeFoo() {
Foo foo{37};
// return {42, {37}}; // error: could not convert ‘{42, {37}}’ from ‘’ to ‘std::tuple’
return {42, std::move(foo)};
}
Run Code Online (Sandbox Code Playgroud)
另一方面,如果将类定义为具有副本构造函数,则元组的构造可以正常工作:
class Bar {
public:
Bar(const Bar&) = default;
int x;
};
tuple<int, Bar> MakeBar() {
return {42, {37}}; // compiles ok
}
Run Code Online (Sandbox Code Playgroud)
有没有办法MakeBar
在Foo
类中使用语法?
是否可以在仅C ++语言的范围内编写测试,以隔离并检测执行时未定义的行为?例如,给出以下代码:
void fn(int* p) {
int x = *p;
}
void foo() {
int x = 42;
fn(&x);
}
void bar() {
fn(nullptr);
}
Run Code Online (Sandbox Code Playgroud)
是否有可能构造一个测试,该测试调用foo
和bar
,并为进行“通过”,foo
但为进行“失败” bar
?我的假设是不可能的,因为调用bar
本身就意味着编译器可以自由生成始终通过,始终失败,仅在星期二失败或仅在无休止的循环中打印“感谢所有鱼”的代码。我还是想得到专家的确认,就是这种情况。
注意:我知道clang的ubsan,静态分析工具和特定于平台的陷阱等信息可以帮助检测UB,但是我的问题仅限于C ++语言。
我的文件中定义了各种分散的路径和文件.gitignore
。我典型的工作流程模式之一是导航到某个路径,然后执行git add *
该路径下的所有更改。然而,当我这样做时,有时会收到警告:“以下路径被您的 .gitignore 文件之一忽略:...”。
这些路径旨在被忽略。有没有办法 A) 在运行时抑制此警告git add *
,或 B) 使用不同的 git 命令,该命令不会触发它,但具有相同的行为并且同样简洁?
我正在尝试生成一个字符串并将其分配给一个字符串,wchar_t*
但是当我去分配字符串时似乎正在填充字符串.这是一个简化的复制品:
wostringstream woss;
woss << L"Test String";
// A: this doesn't work:
const wchar_t* foo = woss.str().c_str();
wcout << foo << endl; // "????????????????????????"
// B: this works:
wstring bar = woss.str();
const wchar_t* foo = foo.c_str();
wcout << foo << endl; // "Test String"
// C: this also works!?:
const wchar_t* foo = woss.str().c_str();
wstring bar = woss.str();
wcout << foo << endl; // "Test String"
Run Code Online (Sandbox Code Playgroud)
当我一次完成转换时(如在A中),指向的结果值foo
是一堆0xFEEE
字符.如果我一步一步地做(如在B中),字符串最终会很好.最奇怪的是,如果在分配之后,我评估 …