小编dan*_*jar的帖子

在变量中存储异常的正确方法

我有一个API,内部有一些错误报告的例外.基本结构是它有一个继承自的根异常对象std::exception,然后它将抛出它的一些子类.

捕获在一个库或线程中抛出的异常并将其捕获到另一个库或线程中可能会导致未定义的行为(至少Qt抱怨它并且在许多情况下不允许它).我想将库调用包装在将返回状态代码的函数中,如果发生异常,则将异常对象的副本包装起来.

存储异常(具有多态行为)以供以后使用的最佳方法是什么?我相信c ++ 0x future API会使用这样的东西.那么最好的方法是什么?

我能想到的最好的clone()方法是在每个异常类中都有一个方法,它将返回一个指向同一类型异常的指针.但这不是很通用,根本不涉及标准异常.

有什么想法吗?

编辑:似乎c ++ 0x将有一个机制.它被描述为"图书馆魔术".这是否意味着不需要c ++ 0x的任何语言功能?如果没有,是否有任何与c ++ 03兼容的实现?

编辑:看起来像有一个异常复制实现.如果没有boost::copy_exception答案,我会保持开放的问题.

编辑:解决j_random_hacker关于异常的根本原因的问题是内存不足错误.对于这个特定的库和一组例外,情况并非如此.从根异常对象派生的所有异常表示由无效用户输入引起的不同类型的解析错误.与内存相关的异常只会导致std::bad_alloc抛出一个单独处理的异常.

c++ exception

8
推荐指数
2
解决办法
3128
查看次数

如何使用jQuery在菜单上创建滑动动画?

我在很多网站上看过这个,但我不确定我是否能够解释它.

有时在导航中有滑动元素,就像用户将鼠标悬停在不同的菜单链接上时滑动的菜单项下的箭头一样.

这是一个简单的菜单:

<ul>
    <li><a href="#">Link 1</a></li>
    <li><a href="#">Link number 2</a></li>
    <li><a href="#">Link 3</a></li>
    <li><a href="#">Link something 4</a></li>
    <li><a href="#">Link 5</a></li>
</ul>   
Run Code Online (Sandbox Code Playgroud)

还有一些jQuery(我知道我可以通过简单的css获得相同的效果:hover):

jQuery('ul li a').hover(function() {
    jQuery('a').removeClass('active');
    jQuery(this).addClass('active');
});
Run Code Online (Sandbox Code Playgroud)

另外,工作jsfiddle:

http://jsfiddle.net/8EvhK/

按钮背景在悬停时变为红色.我希望这个背景在我悬停时在这些按钮之间滑动和变换(宽度).

怎么做那样的事情?我一直在寻找教程,但没有运气.

非常感谢!

javascript css navigation jquery jquery-animate

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

检查两个std :: function是否为Equal

如果我有两个std::functions,我怎么检查两个是否保持相同的功能?

附加信息:我有一个函数向量,std::vector<std::function<void()>>在向向量添加另一个函数之前,我想检查它是否已被包含.

c++ function equals std operators

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

std :: function可以序列化吗?

这是一个理论问题.假设有一些对象包含订阅这些对象事件的回调函数列表.现在我们要将这些对象存储在磁盘上.是可std::function序列化的吗?

c++ theory serialization std-function

8
推荐指数
2
解决办法
1994
查看次数

如何收听所有图像的错误事件?

我想隐藏动态加载的损坏图像.对于静态的,这是有效的.

$('img').error(function() {
    $(this).css({ 'visibility': 'hidden' });
});
Run Code Online (Sandbox Code Playgroud)

但是,当我把它绑定到document没有任何反应时.控制台中也没有错误.

$(document).on('error', 'img', function() {
    $(this).css({ 'visibility': 'hidden' });
});
Run Code Online (Sandbox Code Playgroud)

如何监听动态加载的图像错误?

html javascript jquery events image

8
推荐指数
2
解决办法
1906
查看次数

argparse参数的可选值

我想区分这三种情况:

  • 国旗根本不存在python example.py;
  • 标志存在但没有值python example.py -t; 和
  • 该标志存在并具有值python example.py -t ~/some/path.

我怎么能用Python做到这一点argparse?前两个案件将被覆盖,action='store_true'但第三个案件将失效.

python command-line-interface argparse python-3.x

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

在Visual C++编译器2012年11月CTP中使用std :: initializer_list

我想std::initializer_list在Visual Studio 2012中使用s,就像这个例子中的人一样.我的操作系统是Windows 8 x64.

因此,我最近安装了Visual C++编译器2012年11月的CTP,并且正如Microsoft所提到的,我更改了项目的平台工具集以使用新的更新编译器.

但即便这样做,也没有可用std::initializer_list<initializer_list>头和头.但微软的链接网站告诉我(在标题"概述"下)初始化程序列表可用于该更新.我重新启动了IDE和我的电脑.我不确定是否可能是因为我(遗憾地)使用德语版的Visual Studio并且编译器更新是英文的.我究竟做错了什么?

更新:尝试编译auto a = { 0 };被IntelliSense批评的行,编译器输出显示'Microsoft Visual C++ Compiler Nov 2012 CTP' is for testing purposes only.然后编译器崩溃,并出现一个读取的错误窗口Microsoft (R) C/C++ Compiler Driver has stopped working.没有任何新语法,一切都可以编译并且可以在选择的新编译器中正常工作.

c++ initializer-list visual-c++ c++11 visual-studio-2012

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

将存储在std :: function中的带有子句的lambda转换为原始函数指针

由于我上一个最近的问题不幸地措辞并导致解决另一个问题然后我的,我将在这里尝试以明确的方式制定我的实际问题.

在我们开始之前,作为旁注,我正在将Javascript引擎V8集成到我的C++应用程序中.这就是示例中所有类型的来源.这也是我最终需要一个原始函数指针这一事实的原因.但我在下面详细说明.

从类内部我需要将带有capture子句的lambda表达式[=]作为该类型的参数传递std::function给另一个函数,并将其转换为原始函数指针.

在此代码中,InvocationCallback只是具有签名的函数的typedef Handle<Value>(Arguments const &).

typedef Handle<Value> (*InvocationCallback)(Arguments const &);

void Bind(string Name, function<Handle<Value>(Arguments const &)> Function)
{
    InvocationCallback* function = Function.target<InvocationCallback>();
}
Run Code Online (Sandbox Code Playgroud)

所有lambda表达式也具有相同的签名.请注意,在此示例中与此Handle<String>兼容Handle<Value>.它也是由Javascript引擎V8提供的.

Bind("name", [=](const Arguments& args) -> Handle<Value>{
    Handle<String> result = String::New(Name().c_str());
    return result;
});
Run Code Online (Sandbox Code Playgroud)

C++允许我将此lambda传递std::function给上面的函数.但是我猜一个lambda表达式也存储了对它引用的对象的引用.不知何故[=]必须实现指定的访问.这可能是导致std::function原始函数指针失败的原因.

InvocationCallback* function = Function.target<InvocationCallback>();
Run Code Online (Sandbox Code Playgroud)

既没有编译时错误也没有运行时错误,但调试器告诉我它导致空指针.但我需要原始函数指针进行进一步处理.我想我可以std::bind在引用或this-pointer 之后转换lambda .

更新:由于似乎不可能将状态从lambda中取出,这就是我尝试过的.它编译但是function出来是一个空指针.

Bind("name", this, [](Base* object, const Arguments& args) …
Run Code Online (Sandbox Code Playgroud)

c++ lambda binding function-pointers std-function

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

为什么Visual Studio会生成这些附加文件?

在Visual Studio中放置编译的可执行文件输出目录中,有一种类型的附加三个文件*.exp,*.lib,.pdb.我不需要那些文件,我想阻止编译器创建它们.

这就是我的构建输出目录的样子.我只需要*.exe文件.

输出目录包含不需要的附加文件

这些附加文件是什么?如何禁用它们的生成?如果构建过程需要它们,有没有办法在创建可执行文件后自动删除它们?

我正在使用Visual Studio 2012.如果您需要其他详细信息,请发表评论.

c++ compilation build visual-studio

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

如何引用std :: tuple的元素?

你可以得到的价值n的的个元素std::tuple使用std::get<n>(tuple).但我需要传递该元组的一个元素作为函数的引用.

如何获取对元素的引用std::tuple

c++ reference stdtuple

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