我已经为我的Visual Studio项目文件添加了一个自定义构建步骤,该文件从.proto输入文件生成google protobuf .h/.cc文件.但我一直想知道只有原型文件的内容发生了变化才能开始编译?
有没有办法从自定义构建步骤告诉VisualStudio?将proto文件集成到visual studio构建解决方案中的最佳方法是什么?
目前,在每次构建时都会更新.proto文件,然后还会更新输出.h/.cc文件的时间戳...然后会重新编译从中依赖的所有内容.有没有更好的方法,而仍然直接从视觉工作室构建它们?
我目前正在考虑安全关键软件(DO-178C DAL-D)中的C++和编码标准的定义.我正在看MISRA C++,它已经10年了,并且错过了所有C++ 11 ... 17的功能.
虽然保守的安全性通常并不是一个坏主意,但新的语言功能可能有利于安全.
在评论期间,人们必须争论为什么做出某些决定.人们总是可以争辩说,新的语言特征使代码更清晰......从而减少了有关误解的错误; 特别是如果编译器能够测试和验证您的假设.
但很难找到比"让事情变得更清晰"更突出的安全方面的语言特征.现代C++的哪些方面真正有助于安全?
我正在建立一个小练习项目来测试这些想法,目前完全专注于"让编译器检查你的假设".例如,我们刚开始使用[[nodiscard]]并在第一个小时内以这种方式发现至少两个错误.但是现代c ++的哪些方面被设计并且应该考虑到安全性?
我正在寻找一种灵活但快速的方法来在描述性计算器字符串的基础上进行简单的值转换和计算.
例如这样的事情:
double r = 1.0;
double d = mathf( "sin(%1)+2*%2", r, M_PI );
double e = mathf( "%1 / 180.0 * %2", r, M_PI );
Run Code Online (Sandbox Code Playgroud)
重要的想法是可以在运行时评估数学运算并从配置文件加载.我甚至考虑过某种脚本语言集成,但似乎并不是时髦而快速的?
如果像C++这样的东西存在于C++中的任何想法?
是否可以在没有任何.proto文件的情况下解析传入的google协议缓冲区数据报?我现在只是使用协议缓冲区序列化,但不知道IDL文件.
我正在寻找一种通过某种反射来迭代任何值的方法?这可能吗?
谢谢!
我正在将 Facade DLL 用于静态库。Dll 提供了一个小型接口和资源管理,可以在多个 DLL 之间共享。Dll-Header 确实公开了静态库中的内容:
class DLL_EXPORT MyDllClass {
public:
/// ...
OneStaticLibClass * ptr;
};
Run Code Online (Sandbox Code Playgroud)
问题是:如果这可行,我必须将StaticLib链接到 DLL 和使用 DLL 的应用程序。我无法正确导出StaticLib的部分内容。我在导出标题中尝试过:
class DLL_EXPORT OneStaticLibClass;
Run Code Online (Sandbox Code Playgroud)
但这不起作用...我仍然得到:
undefined reference to OneStaticLibClass::~OneStaticLibClass(void)
undefined reference to OneStaticLibClass::operator<<(char const *)
Run Code Online (Sandbox Code Playgroud)
Andy 的想法是如何使用 DLL 导出部分静态库?
谢谢你!
经过一些延迟测量测试后,我发现我需要优化在具有相当慢的FPU的嵌入式CPU上完成的毕达哥拉斯三角形计算.
问题是,如果这些计算发生,它们会有数字,这会弄乱时间.我无法减少绝对计算次数.但不知何故,他们需要加快......至少因素5: - /
我目前正在考虑预处理这些计算,因为不同值的输入范围以某种方式限制在大约300-500个排列,并且两个表条目之间的插值应该足够.但我也想知道如果使用一些条件来解决问题,也可以加快这段代码的速度:
float h = 0.f, v=0.f;
/// ...
float const d = std::sqrt( (h*h) + (v*v) );
Run Code Online (Sandbox Code Playgroud)
我尚未使用过:
我不知道是否有一些整数定点计算可用于平方根,或者该函数是否可以替换为精度较低或以某种方式使用纵横比的函数.
有任何想法吗?
谢谢!
我一直在使用微软的vscodewith 。cpptools我已成功将调试器(gdb)从launch.json配置附加到我的项目。
但我需要使用该"environment": []数组来设置我的项目,以便我可以从 vscode 中启动新的调试会话。但我不知道该数组的使用语法,并且文档未涵盖该部分。
我已经弄清楚 vscode 报告的解析错误是第一个元素 it "Name"。但价值标签是什么?这至少是行不通的...
"environment": [
{
"Name": "LD_LIBRARY_PATH",
"Value": "/opt/mylibs",
}
]
Run Code Online (Sandbox Code Playgroud)
我该如何填写这个变量?谢谢
我希望从lambda异步执行代码,同时保持eventloop的运行,我想:这可以工作...
auto thread = QSharedPointer<QThread>(new QThread);
QEventLoop l;
connect( thread.data(), &QThread::finished, &l, &QEventLoop::quit );
connect( thread.data(), &QThread::started, [=]() {
for(int i=0; i<100; ++i ) {
qDebug() << "waiting... " << i;
}
QThread::currentThread()->sleep(10);
} );
thread->start();
l.exec();
auto const fin = thread->wait();
qWarning() << fin;
Run Code Online (Sandbox Code Playgroud)
一切都按预期工作,但是:当线程完成其lambda函数时,我没有得到任何帮助。它似乎finished没有发出,并且wait(即使没有额外的事件循环)也将永远阻塞。
如何使事件循环退出或等待返回?还是有更好的方法让lambda在另一个线程中运行,并通过非阻塞事件循环等待它?
谢谢