草庐IT

c++ - 在 C++11 应用程序中记录错误的优雅方法?

我正在开发一个小型C++11应用程序(一个SDL2游戏),我很难将我的一些面向对象的知识从PHP/Java移植到C++。例如,为了创建一个优雅的错误记录方法,我会创建一个具有各种适配器的类并在那里集中记录。我已经用C++做到了,但我不知道我的类应该如何使用Logger类。在Java和PHP中,我会使用依赖注入(inject),并将Logger作为类成员变量放入其中。但是在C++中,正确的方法是什么?我真的不认为静态会很好。 最佳答案 天哪。对我来说,日志记录类似于日期/时间处理:基本情况是微不足道的,但任何比微不足道的事情都极其复杂

c++ - 有没有一种使用 jsoncpp 级 union 并两个 JSON 树的优雅方法?

我正在使用jsoncpp从JSON文件中读取设置。我想要两个级联设置文件,比如MasterSettings.json和LocalSettings.json,其中LocalSettings是MasterSettings的子集。我想先加载MasterSettings,然后再加载LocalSettings。如果LocalSettings的值不同于MasterSettings,则该值将覆盖MasterSettings中的值。很像CSS中的级联。有什么优雅的方法可以用jsoncpp做到这一点吗? 最佳答案 我假设您的设置文件是JSON对象。如

c++ - OpenMP 中优雅的异常处理

OpenMP禁止通过异常离开openmpblock的代码。因此,我正在寻找一种从openmpblock中获取异常的好方法,目的是将其重新抛出到主线程中并在以后进行处理。到目前为止,我能想到的最好的是:classThreadException{std::exception_ptrPtr;std::mutexLock;public:ThreadException():Ptr(nullptr){}~ThreadException(){this->Rethrow();}voidRethrow(){if(this->Ptr)std::rethrow_exception(this->Ptr);}v

c++ - 将常量参数传递给 CUDA 内核的最快(或最优雅)方式

假设我想要一个需要做很多事情的CUDA内核,但是有一些对所有内核都是不变的圆顶参数。此参数作为输入传递给主程序,因此它们不能在#DEFINE中定义。内核将运行多次(大约65K)并且它需要这些参数(和一些其他输入)来进行计算。我的问题是:将这些常量传递给内核的最快(或者最优雅)的方法是什么?常量是2或3个元素长度的float*或int*数组。他们大约有5~10个。玩具示例:2个常量const1和const2__global__voidkernelToyExample(intinputdata,?????){value=inputdata*const1[0]+const2[1]/const

c++ - 解决这个多态性问题的最优雅的方法

编辑:我正在使用C++。因此,我正在创建方法/函数来测试形状之间的交集。我基本上有这个:classShape{};classRectangle:publicShape{};classCircle:publicShape{};classLine:publicShape{};现在,我需要决定编写实际方法/函数来测试交集的最佳方式。但是我所有的形状都将存储在一个形状指针列表中,所以我将调用基本形式的方法/函数:boolintersects(Shape*a,Shape*b);此时,我需要确定形状“a”和“b”的类型,以便正确检测碰撞。我可以轻松地完成其中之一,只需使用一些虚拟方法:classS

c++ - 寻找立方体顶点的优雅方式

几乎每个OpenGL教程都会让您实现绘制立方体。因此需要立方体的顶点。在示例代码中,我看到了一个定义每个顶点的长列表。但我想计算立方体的顶点,而不是使用超长的预先计算坐标列表。一个立方体由八个顶点和十二个三角形组成。顶点由x、y和z定义。三角形分别由三个顶点的索引定义。有没有一种优雅的方法来计算顶点和element多维数据集的索引? 最佳答案 当我“移植”csg.js时项目到Java我发现了一些可爱的代码,可以生成具有选定中心点和半径的立方体。(我知道这是JS,但无论如何)//Constructanaxis-alignedsolid

c++ - 对游戏对象层次结构进行建模的最优雅、最有效的方法是什么? (设计麻烦)

我有以下代码,想想C++中的简单射手://world.hpp//----------classEnemy;classBullet;classPlayer;structWorld{//has-acollisionmap//has-alistofEnemies//has-alistofBullets//has-apointertoaplayer};//object.hpp//-----------#include"world.hpp"structObject{virtual~Object();virtualvoidUpdate()=0;virtualvoidRender()const=0;

c++ - C++11 中的优雅时间打印

这就是我想在C++11中做的事情:给定两个时间点(例如计时类)作为std::chrono::steady_clock::now(),优雅地打印他们的时差,例如:1day4hours3minutes45seconds或32minutes54seconds345milliseconds请注意,我对简单地使用put_time不感兴趣,因为我想从最重要的时间单位开始打印。我知道,这是一个只打印差异的解决方案,但它并不漂亮:我正​​在寻找一个优雅解决方案:)干杯! 最佳答案 Duration可以做算术。#include#include#inc

c++ - 如何编写优雅的碰撞处理机制?

我有点困惑:假设我正在制作一款简单的2D类塞尔达传说游戏。当两个对象发生碰撞时,每个对象都应该有一个结果Action。然而,当主角与某物发生碰撞时,他的react完全取决于他所碰撞的物体的类型。如果是怪物,他应该反弹回来,如果是墙,什么都不应该发生,如果是带有丝带的神奇蓝色盒子,他应该治疗等等(这些只是例子)。我还应该注意,这两者都是碰撞的一部分,也就是说,碰撞事件应该同时发生在角色和怪物身上,而不只是其中之一。你会如何编写这样的代码?我可以想到许多令人难以置信的不优雅的方法,例如,在全局WorldObject类中使用虚函数来识别属性——例如,一个GetObjectType()函数(返

c++ - 计算文件中单词频率的优雅方法

计算文件中每个“英文”单词出现频率的优雅而有效的方法是什么? 最佳答案 首先,我定义letter_onlystd::locale以便忽略来自流的标点符号,并仅从输入流中读取有效的“英文”字母。这样,流会将词"ways"、"ways."和"ways!"视为同一个词"ways",因为流会忽略像"."和"!"这样的标点符号。structletter_only:std::ctype{letter_only():std::ctype(get_table()){}staticstd::ctype_base::maskconst*get_tabl