在C和C++中是否有一种产生线程的跨平台方式?像sched_yield()或Sleep(0)之类的东西?SDL_Delay(0)总是会产生或者在某些实现中会立即返回吗?
我正在寻找一种工具来帮助检测大型 C++ 代码库中包含的不必要的头文件。关于这个主题的其他 stackoverflow 问题都建议使用 cppclean。所以我已经安装了 cppclean 并且我正在尝试使用它,但即使在一些微不足道的错误示例中,它也没有给出任何结果。
例如,这是我要清理的内容。源文件:
// foo.cpp
#include "bar.h"
void main() { };
Run Code Online (Sandbox Code Playgroud)
和头文件:
// bar.h
class bar {
};
Run Code Online (Sandbox Code Playgroud)
我跑:
cppclean foo.cpp
Run Code Online (Sandbox Code Playgroud)
但它不打印任何内容并返回 0。
难道我做错了什么?是否有任何有关如何使用此工具的教程?
我很难编译这个:
use std::thread::{self, JoinHandle};
struct Foo<'c> {
foo: &'c str,
}
impl<'c> Foo<'c> {
fn use_in_another_thread<F>(self, mut cb: F) -> JoinHandle<Foo<'c>>
where F: FnOnce(&mut Foo),
F: Send
{
thread::spawn(move || {
cb(&mut self);
self
})
}
}
fn main() {}
Run Code Online (Sandbox Code Playgroud)
据我所知,生命是健全的,但我收到了错误......
error[E0477]: the type `[closure@src/main.rs:12:23: 15:10 cb:F, self:Foo<'c>]` does not fulfill the required lifetime
--> src/main.rs:12:9
|
12 | thread::spawn(move || {
| ^^^^^^^^^^^^^
|
= note: type must outlive the static lifetime
error[E0495]: cannot infer an appropriate lifetime due …
Run Code Online (Sandbox Code Playgroud) 我刚开始玩TensorFlow,我正在尝试实现一个非常简单的RNN.RNN具有x
作为输出的输入,y
并且仅由单个层构成,x
并且其先前的输出作为输入.这是我想到的那种事情的图片:
问题是,我无法通过TensorFlow API看到构建带有循环的图形.每当我定义Tensor时,我必须指定它的输入是什么,这意味着我必须已经定义了它的输入.所以有鸡和蛋的问题.
我甚至不知道是否有意义定义带有循环的图形(首先计算什么?我是否必须定义softmax节点的初始值?).我玩了一个使用变量来表示先前输出的想法,然后手动获取值y
并在每次通过训练样本后将其存储在变量中.但除非有一种方法可以在图形本身中表示这个过程,因此这将非常缓慢(?).
我知道TensorFlow教程展示了RNN的示例实现,但他们欺骗并将LSTM模块拉出已经具有循环的库.总的来说,这些教程很适合让你了解如何构建某些东西,但是他们可以更好地解释这个野兽是如何工作的.
那么,TensorFlow专家,有没有办法构建这个东西?我该怎么做呢?
有时我想要一个由工作线程不断更新的类,它在创建时会产生.基本上是这样的:
class MyWidget:
def __init__(self):
self.blah = None
self.thread = MyThread(self)
self.thread.start()
def update(self, blah):
self.blah = blah
class MyThread(threading.Thread):
def __init__(self, widget):
self.widget = widget
def run(self):
while True:
time.sleep(1)
blah = poll()
self.widget.update(blah)
Run Code Online (Sandbox Code Playgroud)
我想要一个安全的方法来设计这个,以便我确定线程在MyWidget
不再需要时死掉.上面代码的问题MyWidget
在于它永远不会死,因为它会被它保持活着MyThread
.我可以给修复MyThread
一weakref.ref
到MyWidget
,打破循环的时候参考模,但我已经在过去没有这样的错误.
我真正喜欢的是将垃圾与其他一切一起收集的线程.即.当它的引用图和主线程的引用图是不相交时被杀死的线程.是否有可能写出这样的野兽?他们已经存在吗?
是否有任何工具可以将wasm模块编译为本地可执行文件(例如,ELF或.exe文件)?类似脚本,但相反。失败了,还有其他方法可以在浏览器之外运行webassembly吗?
此代码无法编译:
const int x = 123;
const int y = x;
Run Code Online (Sandbox Code Playgroud)
它抱怨y =行的"初始化元素不是常数".基本上我想要有两个const值,一个是根据另一个定义的.有没有办法在C中执行此操作或者我是否必须使用type-unsafe #defines或者只是将值写为幻数?
char
在C中使用缓冲区时,有时能够一次使用int
大小的数据块会更有用,也更有效.要做到这一点,我可以将我char *
转换为int *
并使用该指针代替.但是,我并不完全相信这种方式与我认为的方式相同.
例如,假设我有char *data
,并*(int32_t *)data = -1
始终覆盖字节data[0]
,data[1]
,data[2]
并data[3]
没有其他字节?
我正在编写一个C库,它使用一些简单的面向对象的继承,就像这样:
struct Base {
int x;
};
struct Derived {
struct Base base;
int y;
};
Run Code Online (Sandbox Code Playgroud)
现在我想将Derived*传递给一个带有Base*的函数:
int getx(struct Base *arg) {
return arg->x;
};
int main() {
struct Derived d;
return getx(&d);
};
Run Code Online (Sandbox Code Playgroud)
这是有效的,当然是类型安全的,但编译器不知道这一点.有没有办法告诉编译器这是类型安全的?我只关注GCC并在这里铿锵作响,因此欢迎编译器特定的答案.我有一些模糊的记忆,看到一些代码可以使用__attribute__((inherits(Base))
或类似的东西,但我的记忆可能在撒谎.
以下代码无法编译,因为编译器不知道foo::bar
它何时遇到它.
class foo : foo::bar {
class bar {
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法让这个代码(或它的一些变体)编译?
如果这是一个愚蠢的问题,我是git的新手,请原谅我.我有一个git存储库,我需要将存储库的特定版本复制到它自己的单独目录.复制的版本本身不需要是git存储库,我不需要或不需要历史记录或.git文件夹,只需要存储库对特定提交的外观.
所以说我这样做:
mkdir blah
cd blah
git init
touch flim0
git add .
git commit -a -m "First commit"
touch flim1
git add .
git commit -a -m "Second commit"
mystery-command ~/some-folder 4be82b42cc91ac3801ad72036cec5f88b6a13bd7
Run Code Online (Sandbox Code Playgroud)
其中4be82b42cc91ac3801ad72036cec5f88b6a13bd7是"第一次提交"的哈希,我想〜/ some-folder是一个只包含文件flim0的目录.
这是否容易/可能无需克隆存储库然后签出特定的修订版然后从克隆的存储库中删除.git?
以下C++代码无法编译:
class BaseA {
protected:
BaseA &operator = (const BaseA &rhs);
};
template<typename T>
class BaseB {
public:
T &operator = (const T &rhs) {
return *static_cast<T *>(this);
};
};
class Derived :
public BaseA,
public BaseB<Derived> {
};
int main() {
Derived foo;
Derived bar;
foo = bar;
return 0;
};
Run Code Online (Sandbox Code Playgroud)
当我尝试编译这个时,我得到一个BaseA &BaseA::operator = (const BaseA &)
未定义的投诉.在stackoverflow上还有其他几个这样的问题,但它们似乎都关注编译器自动生成一个Derived &Derived::operator = (const Derived &)
调用的函数BaseA::operator = (const BaseA&)
.在这种情况下,虽然Derived
应该已经继承了具有该确切签名的函数BaseB<Derived>
.如果我按照另一个问题的建议并添加using BaseB<Derived>::operator =;
到 …
c ×4
c++ ×4
inheritance ×3
git ×2
clang ×1
closures ×1
const ×1
gcc ×1
header-files ×1
lifetime ×1
pointers ×1
python ×1
rust ×1
sdl ×1
templates ×1
tensorflow ×1
transpiler ×1
webassembly ×1