我在多个示例中看到,您可以使用单个字符捕获多个变量,如下所示:
Rect rect;
Point point;
auto someLambda = [&](const SomeType& var)
{
if (rect.Contains(point))
{
var.Something();
}
this->MemberFunction();
};
Run Code Online (Sandbox Code Playgroud)
这最终会抓住rect并point通过引用获得访问权限this,但它实际捕获了多少?它只捕获它需要的变量,还是从字面上捕获当前范围内的所有变量?
我在其他示例中看到,您还可以指定要捕获的各个变量:
Rect rect;
Point point;
auto someLambda = [this, &rect, &point](const SomeType& var)
{
if (rect.Contains(point))
{
var.Something();
}
this->MemberFunction();
};
Run Code Online (Sandbox Code Playgroud)
这样或那样做有什么好处吗?我曾与之合作的人曾提到过使用"全部捕获" [&]版本的价格更贵,但我找不到任何文件来支持这一点.我只想确切地知道,所以我不会让代码变得比它需要的更复杂,或者做一些我不应该做的昂贵的事情.
我在2D网格(x,y)上有一些观点,我需要找到距离该点n个距离的所有点.我测量距离的方法是使用两点之间的距离公式.有人知道怎么做吗?
编辑:仅供参考,我正在尝试做的是编写一些AI路径查找,它将与使用基于网格的位置的系统中的目标保持一定距离.目前我正在使用A*路径查找,但我不确定这是重要还是有所不同,因为我对这些东西不熟悉.
有没有办法在类中存储模板或自动变量而不使类成为模板?我正在尝试存储指向其中一个STL随机数生成器的指针,但是如果不将整个类放入模板中,我无法想出任何方法.这不是一个选项,因为将cpp中的所有内容移动到h文件会导致大量的循环头文件包含我不想处理的内容.所以例如它会是这样的:
class tSomeClass
{
public:
template<typename RNG>
tSomeClass(RNG * rng) : fRNG(rng) { }
private:
RNG * fRNG; // How do I get this working???
};
Run Code Online (Sandbox Code Playgroud)
到目前为止,我提出的所有内容总是需要将整个课程作为模板,所以我很难过.
编辑:我知道我忘了提一些东西.我不能使用继承来指定RNG类型,因为我不知道基数是什么,除非有人知道STL使用的RNG的基类是什么.目前我正在使用std :: default_random_engine.
我试图将对比度和亮度应用于内存中的位图,我完全迷失了.目前我正在尝试使用Magick ++来实现它,但如果其他API中的一个能够更好地工作,我会全力以赴.我设法找到Magick :: Image :: sigmoidalContrast()来应用对比度,但我无法弄清楚如何让它工作.我正在创建一个图像,传递它的缓冲区指针,然后调用该函数,但它似乎并没有改变任何东西,所以我的第一个虽然是它正在复制并修改它.即便如此,我也不知道如何从Magick :: Image对象中获取数据.
这是我到目前为止所得到的.
Magick::Image image(fBitmapData->mGetTextureWidth(), fBitmapData->mGetTextureHeight(), "RGBA", MagickCore::CharPixel, pixels);
image.sigmoidalContrast(1, 20.0);
Run Code Online (Sandbox Code Playgroud)
文档是无用的,搜索后我只能找到第一个参数实际上是布尔值的提示,即使它需要size_t,指定是否添加或减去对比度,第二个值是我不知道该怎么做通过所以我只是用20.0来测试.
那么有谁知道这是否适用于对比,如果没有,那么你如何应用对比?同样,我仍然不知道如何应用亮度,也找不到任何看起来像他们会工作的功能.
我正在尝试使用以下代码加载在C:\ Windows\System32 \文件夹中安装了打印机驱动程序的DLL:
LoadLibraryW(L"C:\\Windows\\System32\\MagAPI.dll");
Run Code Online (Sandbox Code Playgroud)
GetLastError()报告"无法找到指定的模块".如果我将DLL移动到System32文件夹之外(例如C:\ SomeFolder\MagAPI.dll),那么它将加载正常,因此它似乎不是DLL本身的问题.是否有一些奇怪的Windows安全功能可能阻止我的应用程序加载它?这是我唯一能想到的,但我找不到任何明确的答案.
这是ShowSnaps的调试输出,它显示了它失败的地方:
1a8c:1fd4 @ 19006756 - LdrLoadDll - ENTER: DLL name: C:\Windows\system32\MagAPI.dll DLL path: C:\Windows\system32;C:\Windows\system;C:\Windows;.;<otherstuff>
1a8c:1fd4 @ 19006756 - LdrpLoadDll - ENTER: DLL name: C:\Windows\system32\MagAPI.dll DLL path: C:\Windows\system32;C:\Windows\system;C:\Windows;.;<otherstuff>
1a8c:1fd4 @ 19006756 - LdrpLoadDll - INFO: Loading DLL C:\Windows\system32\MagAPI.dll from path C:\Windows\system32;C:\Windows\system;C:\Windows;.;<otherstuff>
1a8c:1fd4 @ 19006756 - LdrpFindOrMapDll - ENTER: DLL name: C:\Windows\system32\MagAPI.dll DLL path: C:\Windows\system32;C:\Windows\system;C:\Windows;.;<otherstuff>
1a8c:1fd4 @ 19006756 - LdrpSearchPath - ENTER: DLL name: C:\Windows\system32\MagAPI.dll DLL path: C:\Windows\system32;C:\Windows\system;C:\Windows;.;<otherstuff>
1a8c:1fd4 @ 19006756 - LdrpResolveFileName - ENTER: …Run Code Online (Sandbox Code Playgroud) 我有一个圆,例如半径为10,并且由于其宽度和高度等于半径,我可以很容易地找到外部边界矩形,但是我需要的是内部边界矩形。有谁知道如何从圆的外部和内部边界矩形计算大小差异?
这是一张图片,用来说明我在说什么。我知道,红色矩形是圆的外部边界框。黄色矩形是该圆的内部边界矩形,我需要找出与外部矩形的大小差异。

我发现差异的第一个猜测是找到内矩形的四个点之一,方法是沿着圆的圆周找到该点,每个点的偏移量为45度,然后找出与该点不同的点大矩形的相关点。
编辑:基于史蒂夫·B给出的解决方案。我想出了算法来得到我想要的是以下内容:
r*2 - sqrt(2)*r
Run Code Online (Sandbox Code Playgroud) 我正在使用StretchDIBits打印图像,当图像由于某种未知原因而处于特定大小时,它会失败.
图像数据从24位BGR格式的某些其他图像源加载到unsigned int数组中.我已经验证了图像和缓冲区完全没问题,因为就像我说的那样,它可以在某些尺寸上工作但根本不工作.
我正在测试的当前尺寸是638x1014.如果我将高度更改为1013它可以正常工作,但由于某种原因,如果它是1014,它就会失败.
这里有一些代码向您展示如何设置它们:
unsigned int * buffer = new unsigned int[width * height * 3];
// Fill buffer with image data...
BITMAPINFOHEADER bi = { 0 };
bi.biSize = sizeof(BITMAPINFOHEADER);
bi.biWidth = width;
bi.biHeight = height;
bi.biPlanes = 1;
bi.biBitCount = 24;
bi.biCompression = BI_RGB;
bi.biSizeImage = width * height * 3; // Specifying this value because if I don't it will crash trying to read outside of the buffer.
StartPage(hdcPrint);
SetMapMode(hdcPrint, MM_ISOTROPIC);
SetWindowExtEx(hdcPrint, width, height, …Run Code Online (Sandbox Code Playgroud)