标签: c++

.NET与C++ .NET之间的主要区别是什么?

可能重复:
Managed C++和C++/CLI有什么区别?
什么是CLI/C++?它与'普通'c ++有何不同?

我对区分C++和C++ .NET存在疑问.

那是对的C++是非托管代码而C++ .NET是托管代码吗?

我需要用C++编写一个项目.为了更好地构建GUI,我更喜欢使用C++ .NET.

我还有另一个普通的C++库(非托管C++ DLL文件),是否可以将它用作C++ .NET项目中的普通DLL库?

c++ visual-c++

25
推荐指数
3
解决办法
6万
查看次数

如何摆脱"这个类的文档是从以下文件生成的"段落?

什么选项,以及GUI前端的位置,我是否需要设置删除段落

此类的文档是从以下文件生成的:

从我的项目文档页面?

或者,如何删除此文件列表中的绝对路径,例如C:/Users/Avesta/Desktop/CF/trunnk/CloudServer/在下面的代码段中:

在此输入图像描述

c++ documentation doxygen

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

C++:使用istream包装vector <char>

我想换一个vector<char>std::istream(所以读完载体将通过完成istream接口)

这样做的方法是什么?

c++

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

C++的std map插入语义的基本原理?

std::map::insert的语义让我有些困惑.我的意思是,我不是在抱怨 - 标准是标准,API就是这样.仍然,

insert

插入操作检查插入的每个元素是否已经在具有相同键值的容器中存在另一个元素,如果是,则不插入该元素,并且不以任何方式更改其映射值.

而且 - 只有在它的单参数版本中pair<iterator,bool> insert ( const value_type& x );它甚至会告诉你它是否甚至将(新的,可能不同的)值插入到键中.据我所知,如果密钥已经存在,迭代器版本将默默地忽略插入.

对我来说,这只是反直觉,我原本期望值部分被覆盖,旧值部分在插入时被丢弃.显然,STL的设计者有不同的想法 - 任何人都知道(历史)的基本原理,或者能够彻底解释现有语义如何(更有意义)?

举例:

在单键映射中实现插入有几种基本方法,例如std::map:

  • 插入,替换,如果已经存在
  • insert,如果已经存在则忽略(这是std :: map的行为)
  • 插入,抛出错误,如果已经存在
  • 插入,UB如果已经存在

我现在试图理解为什么insert_or_ignoreinsert_or_replace(或insert_or_error)更有意义!


我查看了我的TC++ PL副本(不幸的是我只有德语版),有趣的是,Stroustrup在第17.4.1.7章(地图列表操作)中写道:(抱歉粗略翻译德语)

(...)通常情况下,在调用insert()(...)之前,人们不关心是否新插入了密钥(sic!)或已经存在密钥(sic!)

在我看来,它只适用于集合,而不适用于地图,因为对于地图,如果插入了提供的值或旧的遗留在地图中,它确实会产生很大的差异.(这显然与密钥无关,因为密钥是等效的.)


注意:我知道operator[]并且我知道有效STL的第24项和那里提出的efficientAddOrUpdate功能.我只是对insert语义的理由感到好奇,因为我个人觉得它们反直觉.

c++ map standard-library

25
推荐指数
2
解决办法
1919
查看次数

OpenGL闪烁/损坏,窗口调整大小并且DWM处于活动状态

我有一个wxWidgets应用程序,它有许多子opengl窗口.我正在使用自己的GL画布类,而不是wx类.Windows共享他们的OpenGL上下文.我不认为它是wxwidgets的事实在这里真的很重要.

opengl窗口是窗口的子窗口,它们是彼此的兄弟,包含在选项卡控件中.MDI样式界面的种类,但它不是MDI窗口..每个窗口都可以单独调整大小.除非启用Aero且DWM处于活动状态,否则一切都很可爱.

调整任何窗口(甚至不是opengl窗口)的大小会导致所有opengl窗口偶尔闪烁,其中包含一个陈旧的后备存储视图,其中包含屏幕上那个非opengl的垃圾.这仅在启用Aero时发生.

我很确定这是DWM实际上没有在其绘图表面后备存储上的opengl内容,并且窗口没有在正确的时刻重新绘制.

我已经尝试了很多东西来解决这个问题,我确实有一个解决方案,但它不是很好,并且需要将带有glReadPixels的帧缓冲区读入DIB,然后在我的onPaint例程中将其渲染到绘制DC.这种解决方法仅在DWM处于活动状态时才启用,但我根本不必这样做,因为它会稍微损害性能(但在功能强大的系统上也不会太糟糕 - 场景是相对简单的3d图形).也不推荐混合使用GDI和opengl,但这种方法令人惊讶.我现在可以忍受它,但我宁愿不必.如果我想截取子窗口的截图,我仍然需要在WM_PRINT中执行此操作,我没有看到解决方法.

有谁知道更好的解决方案吗?

在有人要求之前我肯定会做以下事情:

  • Window类有CS_OWNDC
  • WM_ERASEBACKGROUND不执行任何操作并返回TRUE.
  • 启用双缓冲.
  • Windows具有WS_CLIPSIBLINGS和WS_CLIPCHILDREN窗口样式.
  • 在我的resize事件处理程序中,我立即重新绘制窗口.

我试过了:

  • 在像素格式描述符中设置PFD_SUPPORT_COMPOSITION.
  • 不在paint处理程序中使用wxPaintDC而是调用:: ValidateRect(hwnd,NULL).
  • 处理WM_NCPAINT并排除客户区
  • 通过DWM API禁用NC涂料
  • 在paint事件中排除客户区
  • 在缓冲区交换之前和之后调用glFlush和/或glFinish.
  • 在每个油漆事件中使窗口无效(作为测试!) - 仍然闪烁!
  • 不使用共享GL上下文.
  • 禁用双缓冲.
  • 写入GL_FRONT_AND_BACK

禁用DWM不是一种选择.

据我所知,如果你在OpenGL上使用Direct3D,这甚至是一个问题,虽然我没有测试过它,因为它代表了很多工作.

c++ windows opengl direct3d dwm

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

我应该停止使用OpenCV吗?

首先,我想让你知道我真的很喜欢OpenCV.我已经使用了很长时间了,而且我使用它太多了,我可以指望上个月我必须查看文档的次数.我认为这是您每天使用计算机视觉时想要使用的工具.

我越来越觉得Opencv真的不适合使用应用程序.我正在开展宠物项目,这些项目旨在让任何人都可以轻松安装.

最新版本的OpenCV没有附带exes,Linux软件包已经过时了,我甚至都不敢使用它们.因此,最好的解决方案是大多数情况下的编译.在考虑移动应用程序或云计算时也是如此(即使解决方案似乎存在).

所以我的问题是,你们是怎么做的?我周围有很多基于计算机视觉的应用程序,基于云,基于移动,...你用什么工具?

我会寻找可用于最多平台的东西,但最重要的是通过应用程序可以轻松实现!

我在互联网上搜索了很多,但总是回到OpenCV是计算机视觉的"最佳"工具.

我对任何解决方案/语言/工具/框架都很开放.

谢谢 !

c c++ opencv image-processing computer-vision

25
推荐指数
3
解决办法
9318
查看次数

字符串数组为十六进制字符串C++

我之前搜索char*到十六进制字符串,但实现我发现在十六进制字符串的末尾添加了一些非存在的垃圾.我从套接字接收数据包,我需要将其转换为十六进制字符串以进行日志(以null结尾的缓冲区).有人可以建议我对C++有一个很好的实现吗?

谢谢!

c++ buffer hex byte

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

在C++中以高性能将double转换为char*

我的应用程序需要将double值转换为char*以写入仅接受字符的管道.通常的方法是使用sprintf()函数或使用iomanip.h头文件中的ostringstream.

事实证明,这两者都有非常糟糕的表现.我的应用程序需要经常进行此转换,以至于它成为主要的瓶颈.

我还可以使用其他功能吗?我可以使用什么逻辑来编写有效的转换函数?到目前为止,我唯一想到的就是使用除法和修改操作来获取每个数字,并将这些数字附加到char*以获得整个double值.这似乎不是一个好方法,并且本身可能会有糟糕的表现.

提前感谢您的想法.

编辑:关于如何使用char*存在一些混淆.char*将是写入管道的fwrite函数的参数.

c++ performance type-conversion

25
推荐指数
3
解决办法
4万
查看次数

是否可以移动boost :: optional?

我一直试图在一个带有boost::optional成员变量的类中定义一个默认的移动构造函数.

#include <boost/optional.hpp>
#include <utility>
#include <vector>

struct bar {std::vector<int> vec;};

struct foo {
  foo() = default;
  foo(foo&&) = default;
  boost::optional<bar> hello;
};

int main() {
  foo a;
  foo b(std::move(a));
}
Run Code Online (Sandbox Code Playgroud)

我的编译器支持移动语义和默认的移动构造函数,但我不能让它工作.

% clang++ foo.cc -std=c++11 -stdlib=libc++
foo.cc:15:7: error: call to deleted constructor of 'foo'
  foo b(std::move(a));
      ^ ~~~~~~~~~~~~
foo.cc:9:3: note: function has been explicitly marked deleted here
  foo(foo&&) = default;
  ^
1 error generated.
Run Code Online (Sandbox Code Playgroud)

有没有办法移动a boost::optional 而不修改Boost的源代码?或者我应该等到Boost支持移动?

我过去遇到了同样的问题boost::any.

c++ boost move-semantics c++11 boost-optional

25
推荐指数
2
解决办法
6500
查看次数

传递,返回并转换为JNI上的向量列表

我需要从Java传递

List< List<MyPoint> > points;
Run Code Online (Sandbox Code Playgroud)

从jni到C++并转换为

std::vector< std::vector<MyPoint> >
Run Code Online (Sandbox Code Playgroud)

处理此向量并返回

List< List<MyPoint> >
Run Code Online (Sandbox Code Playgroud)
  1. 如何正确传递和返回列表清单?
  2. 如何转换对象向量向量中的对象列表列表并向后转换?

c++ java java-native-interface list stdvector

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