我有一个像这样的正则表达式:
regexp = u'ba[r|z|d]'
Run Code Online (Sandbox Code Playgroud)
如果单词包含bar,baz或bad,则函数必须返回True .简而言之,我需要用于Python的正则表达式模拟
'any-string' in 'text'
Run Code Online (Sandbox Code Playgroud)
我怎么才能意识到这一点?谢谢!
我在python中使用协议缓冲区,我有内部Person
消息
repeated uint64 id
Run Code Online (Sandbox Code Playgroud)
但是当我尝试分配时
person.id = [1, 32, 43432]
Run Code Online (Sandbox Code Playgroud)
我得到错误Assigment not allowed for repeated field "id" in protocol message object
如何分配给重复的字段?
想象一下,我有代码:
vector<int> temp = vector<int>(1 000 000 000);
Run Code Online (Sandbox Code Playgroud)
上面不会编译,因为编译器会抱怨空格.是否可以指示C++在编译时省略这些空格,或者使数字更容易阅读?
我有以下问题:
在C++程序中,我有一个声明为的全局数据结构Renderer Rendering_Handler
,其中包含一个定义为的成员字段vector<Render_Info> visble objects
.
数据结构本身正在做什么并不重要,它们是抽象数据以并行化我的程序所需的包装器.
要清楚,Rendering_Handler是完全全局的,它实际上是一个单例(我可以100%确认构造函数已被调用一次,对于此类只调用一次).
我已经声明了以下类方法:
Render_Info* Renderer::add_Render_Info()
{
visible_objects.push_back(Render_Info());
return &(visible_objects.back());
}
Run Code Online (Sandbox Code Playgroud)
很简单,它创建一个新Render_Info
结构,将它附加到visible_objects
数组并返回指向该对象的指针.
调用的另一个数据结构Chunk
具有定义为的构造函数
Chunk::Chunk(vec3 offset, World* w)
{
/*initialize some values*/
draw_info = Rendering_Handler->add_Render_Info();
draw_info->VBOs = vector<GLuint>(5);
/*initialize OpenGL VAOs, VBOs and other buffer objects*/
cout << draw_info->VBOs.size() << endl;
cout << draw_info << endl;
}
Run Code Online (Sandbox Code Playgroud)
它还有一个定义为的方法:
void Chunk::update_render_info()
{
cout << draw_info->VBOs.size() << endl;
cout << draw_info << endl;
/*OpenGL stuff*/
}
Run Code Online (Sandbox Code Playgroud)
最后
我们有初始化所有内容的方法:
World::World() …
Run Code Online (Sandbox Code Playgroud) 我正在尝试在我正在构建的物理引擎中执行以下操作:
有2个线程,一个用于世界逻辑,一个用于渲染.
主线程(创建其他线程的线程)是渲染线程,然后世界线程从它分叉.
在渲染线程上有一个称为渲染处理程序的全局数据结构,声明为:
class Renderer
{
private:
/*
shader stuff
*/
mutex busy_queue;
vector<Render_Info*> render_queue;
public:
/*
Bunch of methods
*/
void add_data(Render_Info*);
void render();
};
Run Code Online (Sandbox Code Playgroud)
并且Render_Info结构声明为:
struct Render_Info
{
mutex info_lock;
GLuint VAO;
vector<GLuint> VBOs;
vector<GLuint> types;
uint layouts;
uint render_instances;
Mesh* geometry;
};
extern Renderer *Rendering_Handler;
Run Code Online (Sandbox Code Playgroud)
这里的想法如下.任何希望渲染某些东西的线程都必须处理它自己的数据并将其放入OpenGL原语中.然后它将该信息放入一个Render_Info
对象中,该对象充当线程和呈现线程之间的消息.
然后该线程使用该add_data()
方法发送指向它的数据消息的指针,该数据消息被附加到render_queue
as:
void Renderer::add_data(Render_Info* data)
{
busy_queue.lock();
render_queue.push_back(data);
busy_queue.unlock();
}
Run Code Online (Sandbox Code Playgroud)
最后,当渲染线程选择渲染某些东西时,它会锁定队列(阻止任何东西被添加到队列中)渲染所有内容,然后清除队列.
当然,现在需要更多的线程协调,但这是这个想法的要点.
问题是,我只是试图创建OpenGL VAO和VBO而产生分段错误,更不用说填充数据了.
据我所知,OpenGL远离线程安全,因为长颈鹿不是海豚.
问题的原因似乎是OpenGL上下文属于主线程,所以当我尝试在世界线程上创建VAO和VBO时,OpenGL会崩溃,因为它不知道发生了什么.
那么我可以做多线程程序呢?
我希望保持尽可能接近我所描述的设计,除非有人提供一个很好的理由说明为什么它不起作用.
我注意到有时当我git pull一个项目时,会有一条消息说:
"warning: redirecting to <url>"
Run Code Online (Sandbox Code Playgroud)
我尝试搜索它的含义,但没有发现任何有用的信息。它是什么?
我正在尝试制作这样的构建脚本:
import glob
import os
import subprocess
import re
import argparse
import shutil
def create_parser():
parser = argparse.ArgumentParser(description='Build project')
parser.add_argument('--clean_logs', type=bool, default=True,
help='If true, old debug logs will be deleted.')
parser.add_argument('--run', type=bool, default=True,
help="If true, executable will run after compilation.")
parser.add_argument('--clean_build', type=bool, default=False,
help="If true, all generated files will be deleted and the"
" directory will be reset to a pristine condition.")
return parser.parse_args()
def main():
parser = create_parser()
print(parser)
Run Code Online (Sandbox Code Playgroud)
然而,无论我如何尝试传递参数,我都只能得到默认值。我总是得到Namespace(clean_build=False, clean_logs=True, run=True)
。
我努力了:
python3 build.py --run False …
Run Code Online (Sandbox Code Playgroud) 当我输入凭据时,GitLab 的 HTTP 拉取和推送工作正常。
但是当使用添加的 SSH 密钥时,它总是询问我的密码,我不知道。GitLab 为什么要这样做?是服务器故障吗?
调用时ssh -vT git@git.com
出现错误:
权限被拒绝(公钥)
我已经尝试了一切,甚至重新安装 Git,但没有任何效果。甚至他们自己的解决方案也不起作用,如下所述:https : //help.github.com/articles/error-permission-denied-publickey/
我目前正在学习vulkan,现在我只是分解每个命令并检查结构以尝试理解它们的含义。
现在,我正在分析QueueFamilies,为此我有以下代码:
vector<vk::QueueFamilyProperties> queue_families = device.getQueueFamilyProperties();
for(auto &q_family : queue_families)
{
cout << "Queue number: " + to_string(q_family.queueCount) << endl;
cout << "Queue flags: " + to_string(q_family.queueFlags) << endl;
}
Run Code Online (Sandbox Code Playgroud)
这将产生以下输出:
Queue number: 16
Queue flags: {Graphics | Compute | Transfer | SparseBinding}
Queue number: 1
Queue flags: {Transfer}
Queue number: 8
Queue flags: {Compute}
Run Code Online (Sandbox Code Playgroud)
所以,我天真地这样理解:
有3个队列族,一个队列族有16个队列,所有队列都可以进行图形,计算,传输和稀疏绑定操作(不知道最后两个是什么)
另一个有1个队列,只能传输(无论是什么)
最后一个有8个能够进行计算操作的队列。
每个队列家庭是什么?我知道这是我们发送绘图和交换缓冲区之类的执行命令的地方,但这是一个较宽泛的解释,我希望获得更多知识的详细答案。
2个额外的标志是什么?转移和稀疏出价?
最后,为什么我们要/需要多个命令队列?
QPainter
很容易使用,画一条线只需这样做:
QPainter painter(&image);
QPen pen;
pen.setWidth(5);
pen.setColor("black");
painter.setPen(pen);
painter.drawLine(QPointF(0,0), QPointF(200,250));
Run Code Online (Sandbox Code Playgroud)
现在这很好用,但我想创建一个“特殊”的笔,产生带有“平滑”边缘的线条。例如,假设我要绘制的线条的粗细为 10 像素,那么我希望线条的中间(中间我指的是粗细而不是长度)完全不透明,并且在线条的边缘应该变得半透明。我相信这可以得到,例如将下面的图片作为我的点,然后“拖动”并绘制线条,这样我就会获得我想要的效果。我知道 Qt 为您提供了QBrush
渐变,但我不知道如何做到这一点。