我必须递归地重命名一个完整的文件夹树,这样就不会出现任何大写字母(它是C++源代码,但这无关紧要).忽略CVS和SVN控制文件/文件夹的加分点.首选方法是shell脚本,因为shell应该可以在任何Linux机器上使用.
关于文件重命名的细节有一些有效的论据.
我认为应该覆盖具有相同小写名称的文件,这是用户的问题.当检出案例忽略文件时,系统也会用后者覆盖第一个文件系统.
我会考虑AZ字符并将它们转换为az,其他一切只是要求问题(至少使用源代码).
在Linux系统上运行构建需要脚本,因此我认为应该省略对CVS或SVN控制文件的更改.毕竟,这只是一个划痕结账.也许"出口"更合适.
在MSVC中,DebugBreak()或__debugbreak导致调试器中断.在x86上它相当于写"_asm int 3",在x64上它是不同的东西.在使用gcc(或任何其他标准编译器)进行编译时,我也想进入调试器.是否存在平台无关功能或内在功能?我看到了XCode的问题,但它似乎不够便携.
旁注:我主要想用它来实现ASSERT,我知道我可以使用assert(),但我也想在代码中编写DEBUG_BREAK或其他东西.
我想在VBScript中生成GUID字符串.我知道VBScript中没有用于生成一个的内置函数.我不想使用随机生成的GUID.也许有一个ActiveX对象可以使用CreateObject()创建,确保安装在可以生成GUID的(较新的)Windows版本上?
我正在尝试用C++实现2D Perlin噪声生成,我发现一些实现根本没有使用种子(这里,这里或这里).其他实现取种子值以根据噪声值获得不同的噪声.
但是我找到了示例代码,其中一个将种子值添加到函数参数中,计算每个八度音程的噪声值(请参阅链接代码中的PerlinNoise :: Total()).另一个使用3D种子函数并使用固定的种子值作为z值(刚刚找不到示例).其他文章建议使用其他噪音功能.
所以我的问题是,为Perlin噪音生成添加种子值的最佳方法是.给定相同的种子值,应生成相同的噪声值.如果解决方案是使用自定义噪声函数,我会感兴趣它是否可以使用Boost.Random(或C++ 11的标准C++库类)实现.
编辑:用"最好"的方式回答我的意思:什么是给我Perlin噪音的最佳方式,就像它应该工作一样,例如梯度噪音功能.
我正在使用Windows Installer XML工具包创建安装程序msi文件.安装创建的msi文件时,ProgramMenuFolder文件夹下的快捷方式只会导致管理员用户的快捷方式.如何让安装程序在"所有用户"配置文件下创建快捷方式,以便计算机上的每个人都有快捷方式?
我有一个线程池,其中包含一些线程(例如,尽可能多的内核),它们可以处理许多对象,例如数千个对象.通常我会给每个对象一个互斥锁以保护对其内部的访问,在我工作时将其锁定,然后释放它.当两个线程尝试访问同一个对象时,其中一个线程必须等待.
现在我想节省一些资源并且可以扩展,因为可能有数千个对象,并且仍然只有一大堆线程.我正在考虑一个类设计,其中线程具有某种互斥或锁定对象,并在访问对象时将锁分配给对象.这样可以节省资源,因为我只拥有与线程一样多的锁定对象.
现在是编程部分,我想将这个设计转移到代码中,但不知道从哪里开始.我正在使用C++进行编程,并希望尽可能使用Boost类,但是处理这些特殊要求的自编写的类是可以的.我该如何实现?
我的第一个想法是每个线程都有一个boost :: mutex对象,每个对象都有一个最初未设置的boost :: shared_ptr(或NULL).现在,当我想访问该对象时,我通过创建一个scoped_lock对象并将其分配给shared_ptr来锁定它.当shared_ptr已经设置好后,我等待当前的锁定.这个想法听起来像一堆充满竞争条件,所以我有点放弃它.还有另一种方法来完成这个设计吗?一种完全不同的方式?
编辑:上面的描述有点抽象,所以让我添加一个具体的例子.想象一下拥有许多物体的虚拟世界(想想> 100.000).在世界上移动的用户可以在世界中移动并修改对象(例如在怪物处射箭).当只使用一个线程时,我很擅长一个工作队列,其中对象的修改排队.不过,我想要一个更具伸缩性的设计.如果128个核心处理器可用,我想使用全部128个,所以使用这个数量的线程,每个线程都有工作队列.一种解决方案是使用空间分离,例如对区域使用锁定.这可以减少使用的锁的数量,但是如果有一个设计可以节省尽可能多的锁,我会更感兴趣.
MFC CArray类有两个模板参数(来自MSDN):
template < class TYPE, class ARG_TYPE = const TYPE& >
class CArray
...
Run Code Online (Sandbox Code Playgroud)
ARG_TYPE
is 的默认参数是const TYPE&
,SO上的一些问题询问何时使用与默认类型不同的类型(例如,CArray的ARG_TYPE应该是const还是不是,或者CArray和CArray之间有什么区别?).
我现在的问题是:是否有合理的CArray用例,其中ARG_TYPE不是,TYPE
或者const TYPE&
例如是另一个类?这些用法的原因是什么?
通常在 .cpp 文件中使用变量会导致该变量全局可用,如下所示:
.h file:
extern int myGlobal;
void work();
.cpp file:
int myGlobal = 42;
void work(){ myGlobal++; }
Run Code Online (Sandbox Code Playgroud)
当 .cpp 文件放入静态库并且多个共享库 (DLL) 或针对该静态库的可执行链接时,每个文件都有自己的 .cpp 文件副本myGlobal
。work() 将修改它自己的变量版本。
我现在的问题是:有没有办法获取进程范围的唯一变量或指向该变量的指针?与线程范围变量的线程局部存储类似。它不必是平台独立的。如果它能在 Win32 中运行,那就加分了:)
我正在运行可能在x64 Windows下运行的VBScript.我需要从注册表的32位部分读取注册表项.为此,我使用路径HKLM\Software\Wow6432Node\xyz
而不是HKLM\Software\xyz
.如何检查脚本是否在x64下执行?
我正在使用来自Visual C++ 2008的gcc编译代码.代码使用的是errno_t,但在某些版本的gcc头文件中包含的内容<errno.h>
并没有定义类型.如何检测类型是否已定义?是否有定义信号表明类型已定义?在未定义的情况下,我想提供typedef以让代码在所有平台上正确编译.