我正在使用包含多个项目(大约30个)的Visual Studio 2005 C++解决方案.根据我的经验,维护项目的所有属性(即包括路径,lib路径,链接库,代码生成选项......)经常变得很烦人,因为你经常需要点击每个项目才能修改它们.当您有多个配置(Debug,Release,Release 64 bits,...)时,情况会变得更糟.
真人生活的例子:
笔记:
当心,我在说::abs(),不是std::abs()
根据cplusplus.com网站,abs对于stdlib.h C版本应该表现不同,如果你包括<cmath>
以下是此页面的摘录(::abs不处理std::abs):
double abs (double x);
float abs (float x);
long double abs (long double x);
Compute absolute value
/*
Returns the absolute value of x: |x|.
These convenience abs overloads are exclusive of C++. In C, abs is only declared
in <cstdlib> (and operates on int values).
The additional overloads are provided in this header (<cmath>) for the integral types:
These overloads effectively …Run Code Online (Sandbox Code Playgroud) 在C++/CLI中,您可以在托管类中使用本机类型,因为它不允许在托管类中保存本机类的成员:在这种情况下您需要使用指针.
这是一个例子:
class NativeClass
{
....
};
public ref class ManagedClass
{
private:
NativeClass mNativeClass; // Not allowed !
NativeClass * mNativeClass; // OK
auto_ptr<NativeClass> mNativeClass; //Not allowed !
boost::shared_ptr<NativeClass> mNativeClass; //Not allowed !
};
Run Code Online (Sandbox Code Playgroud)
有没有人知道C++/CLI世界中相当于shared_ptr的东西?
编辑:感谢您的建议,"1800-信息".根据您的建议,我检查了STL.Net,但它仅适用于Visual Studio 2008,它提供容器+算法,但没有智能指针.
我知道,我知道,我的消息的标题可能看起来很挑衅,因为boost :: mutex目的不会暴露锁定/解锁(为了避免死锁).
然而,这些方面的提升文档非常简短(至少可以这么说),所以我想问是否有人可以在以下用例中帮助我.
假设你有一个类Foo,它有:
- 一个需要一些时间才能完成的析构函数
- 一个由不同线程调用的方法,但是在销毁期间不应该调用
class Foo
{
public:
virtual ~Foo()
{
//Time consuming operations here
}
//Method called by a timer belonging to a distinct class
void OnTimer()
{
//Other time consuming stuff. Should not be called during destruction !
}
};
Run Code Online (Sandbox Code Playgroud)
我尝试(没有成功)实现基于boost :: mutex的版本
//boost::mutex implementation
class Foo
{
public:
Foo()
{
}
virtual ~Foo()
{
{
boost::mutex::scoped_lock lock(mDisposingMutex);
//Time consuming operations here
}
}
//Method called by a timer belonging to a distinct …Run Code Online (Sandbox Code Playgroud) 我正在努力获得一种可靠的方法来捕获Visual Studio(2005或2008)下的浮点异常.默认情况下,在visual studio下,浮点异常没有被捕获,并且它们很难捕获(主要是因为它们中的大多数是硬件信号,需要转换为异常)
这是我做的:
- 打开SEH异常处理
(属性/代码生成/启用C++异常:是的SEH异常)
- 使用_controlfp激活浮点异常
我现在抓住异常(如下面的例子中所示,简单的除零除外).但是,一旦我捕获到这个异常,似乎程序被无可挽回地破坏了(因为简单的float初始化,以及std :: cout将不起作用!).
我已经构建了一个简单的演示程序,显示了这种相当奇怪的行为.
注意:此行为已在多台计算机上重现.
#include "stdafx.h"
#include <math.h>
#include <float.h>
#include <iostream>
using namespace std;
//cf http://www.fortran-2000.com/ArnaudRecipes/CompilerTricks.html#x86_FP
//cf also the "Numerical Recipes" book, which gives the same advice
//on how to activate fp exceptions
void TurnOnFloatingExceptions()
{
unsigned int cw;
// Note : same result with controlfp
cw = _control87(0,0) & MCW_EM;
cw &= ~(_EM_INVALID|_EM_ZERODIVIDE|_EM_OVERFLOW);
_control87(cw,MCW_EM);
}
//Simple check to ensure that floating points math are still working
void CheckFloats() …Run Code Online (Sandbox Code Playgroud) 我在不知情的情况下不小心使用了可变的默认参数。
有没有可以发现这一点并警告我的 linter 或工具?
我正在尝试根据我的需要调整ListBox的行为,我遇到了几个问题
1)如何以编程方式设置ListBox的滚动位置
ListBox不提供其内部ScrollViewer的访问器,因此您无法将其滚动到任何您想要的位置.
2)如何准确设置垂直滚动(即如何平滑滚动)?
默认情况下,无法通过一次滚动一个完整元素来滚动其他列表(列表框将始终确保第一个元素完全显示)
在大多数情况下这种行为是可以的,但不是我的:我想要一个平稳的运动...),
WPF有一个解决这个问题的方法,但Silverlight没有解决方案(请参阅问题"是否可能实现 - 在-wpf-listview中实现平滑滚动").
3)如何捕获MouseDown和MouseUp事件:
如果您继承ListBox,您可能能够捕获MouseUp和MouseMove事件.但是,MouseUp事件永远不会被触发(我怀疑它被ListBox子元素吃掉了)
这个问题与"C++中的数字配方"一书有关,因此它将保留给了解它的人以及多维优化.
我正在编写一个需要搜索多维根的程序,为了解决这个问题,我使用的是多维牛顿根查找方法,即"newt"程序.
对于那些对细节感兴趣的人,我试图将一个可变形的3D模型拟合到一个物体的立体视图,基于一些特征点(两个摄像机可以看到的特征点).
为此,我使用newt过程如下:
我的问题是我有比输入参数(11)更多的输出参数(14):每当我调用"newt"时,算法总是收敛,但是它会找到一个解决方案,几乎完美地最小化了11个第一个输出参数,但是剩下的3个参数有很多错误.
但是我希望错误在输出参数之间统一划分.
我已经尝试过下面描述的方法:
有没有人知道更通用的方法,其中根查找算法会支持在输出参数之间均匀划分的错误,而不是支持第一个参数?
c++ mathematical-optimization newtons-method numerical-methods
我想知道我是否正在使用以下的好方法:
下面的代码似乎有效,但我想知道我是否只是"幸运"编译器足够同情.
为清楚起见,我在下面的评论中添加了评论和我的问题.
谢谢 !
struct Foo
{
std::string mValue;
};
class B
{
public:
B(const Foo & foo) : mFoo_External(foo) {}
private:
const Foo & mFoo_External; //this is an external reference to the member
//(coming from A)
};
class A
{
public:
//Here is the big question
//Shall I use :
// A(const Foo & foo) : mFoo(foo), mB(mFoo) {}
// or the declaration below
A(const Foo & foo) : mFoo(foo), mB(foo) {}
private:
//According to my …Run Code Online (Sandbox Code Playgroud) 我试图在未安装Visual Studio 2005的远程计算机上运行(和调试)我的应用程序.我当前的问题是我遇到了(in)着名的错误:"应用程序无法启动,因为应用程序配置不正确".
这是我做的:
1)在目标计算机上安装所有必需的vcredist :(我确实需要所有这些版本,因为有些库是几个月前编译的,以前的运行时...).
安装那些redist之后,发布版本运行正常.
2)按照以下MSDN页面上给出的说明安装调试dll:准备测试机器以运行调试可执行文件 以及如何:使用XCopy进行部署
如"准备测试机器以运行调试可执行文件"中所述:
我确实运行了"msiexec/i microsoft_vc80_debugcrt_x86.msm" - >这并没有解决问题.
之后,我添加了"msiexec/i policy_8_0_Microsoft_VC80_DebugMFC_x86.msm" - >也没有运气.
作为最后的手段,我为C:\ Program Files\Common Files\Merge Modules\*VC80*.msm中的所有msm做了"msiexec/i" - >也没有运气
提到的是"使用XCopy部署":
我还复制了(在子文件夹中)的所有子文件夹
和
到我的目标机器上的应用程序目录.问题仍然存在.
有谁知道我可能会缺少什么?
我试图通过直接在pixelData缓冲区上绘制像素来更新javascript画布.基本上我会在每次mousemove/touchmove事件后更新imageData缓冲区上的所有像素,并尝试获得最佳性能.
背景:我正在开发一个基于emscripten的应用程序,其中画布上的绘图是由"本机"代码逐个像素完全绘制的.我在这个问题中给出的例子是一个更简单的例子,我在那里复制了我的问题.
我目前遇到了两个性能问题:
在桌面Mac上,我获得了稳定的性能:使用firefox的55 fps和使用chrome的45 fps
所以,我有两个问题
请参考下面的代码:它是一个单独的html文件,可以重现我的问题.
我知道我可以使用webworker,但由于我使用的是emscripten,这不是最佳的(每个webworker都以新的内存开始,我需要记录状态).
请参阅此处的代码(它是一个单独的html文件,js是自包含的).请在画布内移动鼠标以查看计算出的fps.
<canvas width=800 height=600 id="canvas"> </canvas>
<script>
//Disable scroll : usefull for tablets where touch events
//will scroll the page
function DisableScroll()
{
window.addEventListener("touchmove", function(event) {
if (!event.target.classList.contains('scrollable')) {
// no more scrolling
event.preventDefault();
}
}, false);
}
window.requestAnimFrame = (function(){
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
function( callback ){
window.setTimeout(callback, 1000 / 60);
};
})();
window.countFPS = (function () …Run Code Online (Sandbox Code Playgroud) 很抱歉问一个以前可能会问的问题,但我搜索了足够长的时间并没有找到答案。
我的问题是我想调用一个类型的模板函数,template <typename GenericLambda, typename... LambdaArgs>而不需要总是decltype(my_lambda)先写在模板参数中。
#include <functional>
#include <string>
template <typename GenericLambda, typename... LambdaArgs>
auto lambda_to_mem_fn() {
auto ptr = &GenericLambda::template operator() < LambdaArgs... > ;
auto as_mem_fn = std::mem_fn(ptr);
return as_mem_fn;
}
auto my_lambda = [](auto x, auto y) { return x + y; };
// imaginary function
template <????>
auto make_lambda_to_mem_fn(GenericLambda generic_lambda)
{
// Extract lambda args types and forward them to lambda_to_mem_fn
using GenericLambda = decltype(generic_lambda);
lambda_to_mem_fn<GenericLambda, LambdaArgs...>();
}
void test() { …Run Code Online (Sandbox Code Playgroud) c++ ×4
ios ×2
auto-ptr ×1
boost ×1
c++-cli ×1
c++14 ×1
canvas ×1
cmath ×1
debugging ×1
decltype ×1
emscripten ×1
exception ×1
html5 ×1
iphone ×1
javascript ×1
listbox ×1
mutex ×1
opencv ×1
python ×1
side-by-side ×1
silverlight ×1
templates ×1
visual-c++ ×1