libstdc ++(GNU)和libc ++(LLVM)都std::optional
使用联合实现值存储,并且它们都包含一个虚拟成员。
GNU实现:
using _Stored_type = remove_const_t<_Tp>;
struct _Empty_byte { };
union {
_Empty_byte _M_empty;
_Stored_type _M_payload;
};
Run Code Online (Sandbox Code Playgroud)
LLVM实施:
union
{
char __null_state_;
value_type __val_;
};
Run Code Online (Sandbox Code Playgroud)
我的问题是:我们为什么需要这些_M_empty
/ __null_state_
会员?单成员工会有什么问题吗?
我正在构建一个跨平台的Web应用程序,其中音频在服务器上即时生成,并且可能通过HTML5音频元素直播到浏览器客户端.在浏览器上,我将使用Javascript驱动的动画,这些动画必须与播放的音频精确同步."精确"意味着音频和动画必须在彼此之间,并且希望在250ms内(想想唇形同步).由于各种原因,我无法在服务器上进行音频和动画,并对生成的视频进行实时流式传输.
理想情况下,服务器上的音频生成和浏览器上的音频播放之间几乎没有或没有延迟,但我的理解是延迟将难以控制,并且可能在3-7秒范围内(浏览器,环境 - ,网络和月相依赖).但是,我可以处理这个问题,如果我可以在运行中精确测量实际延迟,以便我的浏览器Javascript知道何时呈现正确的动画帧.
那么,我需要精确测量我将音频传输到流媒体服务器(Icecast?)和来自扬声器主机上扬声器的音频之间的延迟.一些蓝天的可能性:
将元数据添加到音频流,并从播放音频中解析它(我知道使用标准音频元素是不可能的)
为音频添加短暂的纯静音时段,然后在浏览器上检测它们(音频元素可以产生实际的音频样本吗?)
查询服务器和浏览器的各种缓冲区深度
在Javascript中解码流式音频,然后获取元数据
有关如何做到这一点的任何想法?
我正在使用Gitlab CI,因此一直在处理相当复杂的.gitlab-ci.yml
文件。该文件具有一个after_script
部分,该部分在主要任务完成或主要任务因某种原因失败时运行。问题:我需要根据主要任务是成功还是失败进行不同的清理,但是我找不到任何表示主要任务结果的Gitlab CI变量。
在该after_script
部分中,我怎么知道主要任务是成功还是失败?
我正在开发一个嵌入式项目,该项目将 Linux 源代码树作为子模块。我目前在非开发机器上工作,所以我永远不会使用这个存储库进行构建;仅供参考。
有一次我初始化了 linux 子模块(带来了大约 2.5GB 的数据),但现在我想反转这个过程,在这个存储库中保留未初始化的 linux 子模块。明确地说,就 Git 而言,我不想检查对子模块的任何更改;我只想要我的磁盘空间。
我怎样才能做到这一点?我可以删除./linux
和.git/modules/linux
目录以摆脱所有不需要的数据,但我怀疑这会让 git 理所当然地感到困惑和烦恼。
我一直在Visual Studio Code中构建一个Angular 2/Typescript项目,并且刻苦地添加了JSDoc注释块,但我现在想查看JSDoc输出.我可以安装和设置我自己的JSDoc生成系统,但是在VSC中提供了所有良好的GUI支持,从VSC生成和查看JSDoc似乎是合理的.
我的Google-Fu一直让我失望; 每当我寻找"在Visual Studio代码中生成JSDoc输出"时,我只需要插件来生成JSDoc注释块.
是否有在Visual Studio代码中生成和查看JSDoc输出的方法?
我的任务:计算3D网格的像素坐标(例如制作快照),从特定的摄像机角度找到该网格的2D形状.
我目前正在使用带有QGeometryRenderer的Qt3D将包含网格的场景渲染到QWidget,它可以正常工作.我尝试使用QWidget :: render()将QWidget的内容呈现为Pixmap,如本文所建议的如何创建QWidget的屏幕截图?.将像素图保存为.jpg会产生具有默认背景颜色的空白图像,这是有意义的,因为QWidget本身并未保存网格对象.
以下是我在mainwindow.cpp中设置场景的方法
// sets the scene objects, camera, lights,...
void MainWindow::setScene() {
scene = custommesh->createScene(mesh->getVertices(),
mesh->getVerticesNormals(),
mesh->getFaceNormals(),
mesh->getVerticesIndex(),
mesh->getFacesIndex()); // QEntity*
custommesh->setMaterial(scene); // CustomMeshRenderer object
camera = custommesh->setCamera(view);
custommesh->setLight(scene, camera);
custommesh->setCamController(scene, camera);
view->setRootEntity(scene); // Qt3DExtras::Qt3DWindow object
// Setting up a QWiget working as a container for the view
QWidget *container = QWidget::createWindowContainer(view);
container->setMinimumSize(QSize(500, 500));
QSizePolicy policy = QSizePolicy(QSizePolicy::Policy(5), QSizePolicy::Policy(5));
policy.setHorizontalStretch(1);
policy.setVerticalStretch(1);
container->setSizePolicy(policy);
container->setObjectName("meshWidget");
this->ui->meshLayout->insertWidget(0, container);
}
Run Code Online (Sandbox Code Playgroud)
至于渲染,这里是custommeshrenderer类,其中定义了QGeometryRenderer,并在初始化网格时返回QEntity*.
#include "custommeshrenderer.h"
#include <Qt3DRender/QAttribute>
#include <Qt3DExtras>
#include <Qt3DRender/QGeometryRenderer> …
Run Code Online (Sandbox Code Playgroud) 我正在使用 Doxygen 来记录 C++ 代码,并且正在为代码编写大量 Doxygen 文档。在一个地方,我在代码中制作了一个组列表,并希望它显示如下:
我的文档来源如下所示:
- @ref CM:控制一切的模块
- @ref SM:作为@CM 从属的模块
但是,问题:Doxygen 似乎将参考名称读取为CM:
,而不是CM
,因此找不到参考。所以,不知何故,我需要告诉 Doxygen 参考名称在哪里结束。(例如,如果我使用 Bash,并且想要回显带有“s”作为后缀的变量字符串,我会使用echo "${NOUN}s"
.)
作为一种解决方法,我可以在名称和后面的冒号之间添加一个空格,但这会使生成的文档更难阅读,我想避免它。
在Special Commands 下,Doxygen 手册包含以下听起来充满希望的信息:
一些命令有一个或多个参数。每个参数都有一定的范围:
- 如果使用 <sharp> 大括号,则参数是单个单词。
- 如果使用(圆)大括号,则参数将扩展到找到命令的行的末尾。
- 如果使用 {curly} 大括号,则参数会扩展到下一段。段落由空行或节指示符分隔。
好的,这一切都很好,但是文档没有说,我也想不通,这些大括号应该放在哪里。仅围绕争论?围绕整个命令和参数?两者都不起作用,我想不出一个可行的替代方案。
那么,我如何指示 Doxygen 引用名称的结尾?如果大括号是答案,它们会去哪里?
我正在开发一个 node.js 项目,由于历史原因,该项目同时涉及 TypeScript 和 JavaScript。我想设置一些可以在两种语言中使用的项目范围的常量。显而易见:编写一个.js
包含常量的.d.ts
文件,以及一个包含 TypeScript 使用类型的文件。但是没有:几个小时的解决问题(和 RTFMing)让我一无所获。
这是我对常量文件的第一次尝试:
// constants.js
const MY_CONST_1 = 1;
exports.MY_CONST_1 = MY_CONST_1;
Run Code Online (Sandbox Code Playgroud)
...以及使用它的 JavaScript:
// consumer.js
let constants = require('./constants');
let one = constants.MY_CONST_1;
Run Code Online (Sandbox Code Playgroud)
这很有效,但是当我在 TypeScript 中尝试显而易见的事情时:
// consumer.ts
import * as constants from './constants';
let one: number = constants.MY_CONST_1;
Run Code Online (Sandbox Code Playgroud)
不:error TS2307: Cannot find module './constants'.
所以,必须constants.d.ts
在与文件相同的目录中写入一个constants.js
文件,对吗?听起来很简单,但六次不同的尝试都产生了完全一致的结果。无论我做什么,Typescript 都会抱怨error TS2306: File '/Users/griscom/Documents/Work/test/constants.d.ts' is not a module
。
那么,一个成功的constants.d.ts
文件会是什么样子呢?或者,如果我必须进行更改constants.js
才能使其正常工作,它们会是什么?
PS这是我的tsconfig.json …
我正在使用nginx在嵌入式系统中提供静态文件,没有CGI后端.我有多个用户名/密码的基本身份验证.我希望有一个特定的URI根据当前经过身份验证的用户的名称提供不同的内容.
例如,假设浏览器请求URI /index.html.如果浏览器被认证为用户"developer",则可以将其提供给文件/index_developer.html.如果浏览器被认证为"管理员",则可以将其提供给文件/index_administrator.html.
我只希望这个重定向发生在一小组文件上; 大多数将按原样提供.我还需要阻止对实际文件的直接访问,以便没有人可以在系统中进行最终运行.