小编Mra*_*anz的帖子

为什么必须模仿完美的转发功能?

为什么以下代码有效:

template<typename T1>
void foo(T1 &&arg) { bar(std::forward<T1>(arg)); }

std::string str = "Hello World";
foo(str); // Valid even though str is an lvalue
foo(std::string("Hello World")); // Valid because literal is rvalue
Run Code Online (Sandbox Code Playgroud)

但不是:

void foo(std::string &&arg) { bar(std::forward<std::string>(arg)); }

std::string str = "Hello World";
foo(str); // Invalid, str is not convertible to an rvalue
foo(std::string("Hello World")); // Valid
Run Code Online (Sandbox Code Playgroud)

为什么示例2中的左值不会以与示例1中相同的方式解析?

另外,为什么标准认为需要在std :: forward与简单推导中提供参数类型很重要?无论类型如何,简单地呼唤前方都表现出意图.

如果这不是标准的东西,只是我的编译器,我使用msvc10,这将解释蹩脚的C++ 11支持.

谢谢

编辑1:将文字"Hello World"更改为std :: string("Hello World")以生成rvalue.

c++ perfect-forwarding c++11

18
推荐指数
1
解决办法
3755
查看次数

C++ 11文件系统(VS2012)

我在查找vs2012所包含的标题上的任何文档时遇到了很多麻烦.我看到它在这里提到但它们没有提供如何使用它的链接.我真正想要的是如何使用它的文档,首选visual studio实现.谢谢

c++ visual-c++ c++11 visual-c++-2012 c++-tr2

10
推荐指数
1
解决办法
1万
查看次数

使用OpenCV随机森林,有没有办法获得分类的"置信度"水平?

如果我有一个训练有素的随机森林,我有什么方法可以获得每个班级在测试样本上获得的每个班级的投票数量?投票的百分比会更好.

像CVRTrees ::预测,但获得原始输出和预测类.

谢谢

编辑为了进一步解释我的目标,我可以得到一个解决我的问题的答案,而不一定是我的问题.

要回答我知道多少,这很少.

这是一个真实世界的应用程序,我试图让自己尽快加快速度.

本质上,我研究判别分类器,要求我需要能够比较2(或更多)独立分类器之间的输出.我的意思是独立的,他们可能知道也可能不知道整个类的集合,但是确实存在一组类,其中所有分类器都包含这些类的子集.

我最初的目的是从每个分类器中收集关于分类的元信息,理想情况下它将包含某种形式(其中15%是A,78%是B的机会)[我知道机会是一个坏话,但我会离开它].如果我能得到那个输出,我将能够根据分配给每个分类器的动态性能权重执行最终分类.

我的想法是,我可以使用一个非常简单的基于规则的分类器来进行初始分类,而更奇特的分类器有时间训练.理想情况下,学习分类器可能支持比规则分类器更多的类,并且随着时间的推移主要使用它.

c++ opencv

7
推荐指数
1
解决办法
5105
查看次数

无法使用VS 2013 RTM编译OpenCV 2.4.5

有没有人有幸用VS 2013 RTM编译openCV?我已经尝试在IlmImf模块中获得一堆"min不属于命名空间std""max不属于命名空间std",并且opencv_features2d无法编译时出现以下错误:

opencv\modules\core\include\opencv2/core/core.hpp(4512):致命错误C1075:在'.....\modules\features2d\src\features2d_init左括号'{'之前找到的文件结尾.cpp(187)'匹配

由于最新的CMake UI还不支持2013年构建(至少从UI和我是菜鸟),我的流程是配置CMake for 2012,然后用2013打开生成的解决方案并将编译器升级到vc12.

我能够通过在'违规'文件中添加标题包含来超过最小/最大错误,但我对上面发布的完整错误感到困惑.

谢谢

更新:

接受的答案提供了在32位调试和发布以及64位调试中编译OpenCV所需的内容,但现在编译器由于内部编译器错误而无法编译64位版本.这可能是编译器此时的错误,但答案仍然解决了许多问题.

更新2: 因此64位问题被证明是自动矢量化器中的一个错误.这是相应的解决方法.

嗨,谢谢你的错误报告.我确认这是编译器优化器中的一个错误.我们将在未来的版本中修复它.

如果您需要源代码解决方法,请在computeOrbDescriptor内的循环上关闭矢量化:

#pragma loop(no_vector)

for(int i = 0; i <dsize; ++ i)

{

   **...**
Run Code Online (Sandbox Code Playgroud)

这让我可以构建orb.cpp和stardetector.cpp.

如果此问题严重,导致严重的业务情况或阻止您的产品开发或部署,请访问http://support.microsoft.com或致电1-800-MICROSOFT寻求帮助.对于Microsoft Premier客户,请与您的管理员,技术客户经理或Microsoft高级客户代表联系.

我正在关闭此MSConnect项目.如果您还有其他需要,请随时回复.

谢谢,

Eric Brumer - Microsoft Visual C++团队

连接错误可以在这里找到.不幸的是,对此的真正解决方案被推迟到以后的日期.

opencv visual-c++ visual-studio-2013

5
推荐指数
1
解决办法
4736
查看次数

CRC32C SSE 与 BOOST

我正在尝试优化运行 CRC32 检查的一段代码。

对于测试缓冲区,我执行了以下操作:

char *buff = new char[1024];
for (int i = 0; i < 1024; ++i)
    buff[i] = i;
Run Code Online (Sandbox Code Playgroud)

目前,我使用boost的crc实现如下:

boost::crc_optimal<32, 0x1EDC6F41, 0, 0> crc;
crc.process_bytes(buff, 1024);
unsigned int boostCRC = crc();
Run Code Online (Sandbox Code Playgroud)

这意味着多项式“0x1EDC6F41”的初始值为 0,最终异或为 0。

然后,我编写了最简单的 sse4.2 版本的 crc32c 算法:

unsigned int sseCRC = 0;
for (char *iter = buff, *end = buff + 1024; iter != end; ++iter)
    sseCRC = _mm_crc32_u8(sseCRC, *iter);
Run Code Online (Sandbox Code Playgroud)

问题是,最终值不匹配,即使多项式应该是相同的。有人有这方面的经验吗?我的 sse 版本有问题吗?

boost sse visual-c++

3
推荐指数
1
解决办法
1704
查看次数

如何防止r值

我正在创建这样的函数:

void SetItem(const Key &key, const Value &value)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

键和值是某种类型.

在内部,我想像这样存储这对:

std::pair<const Key &, Value>
Run Code Online (Sandbox Code Playgroud)

所以这是我的问题:我需要强制Key实际上是一个l值,以便在函数退出时不会被清除(带有r值的不安全)

我可以为函数签名:

void SetItem(Key &key, const Value &value)
Run Code Online (Sandbox Code Playgroud)

这将阻止使用r值,但它不允许使用const键,我也不喜欢.

有没有办法让我在保留常量的同时强制Key成为l值?

我可以创建一个r值重载来防止它:

void SetItem(Key &&key, const Value &value)
{
     [What do I put here?]
}
Run Code Online (Sandbox Code Playgroud)

谢谢

c++ c++11

1
推荐指数
1
解决办法
207
查看次数