小编Ral*_*zky的帖子

调试Qt信号和插槽有哪些最佳实践?

调试信号和插槽可能很难,因为调试器在发出时不会跳转到信号的插槽.调试Qt信号和插槽有哪些最佳实践?

特别是

  1. 如何确保成功建立连接?
  2. 我何时应该使用信号和插槽,何时应该避开它们?
  3. 根据您的经验,最有效的调试技术是什么?

debugging connection qt signals-slots

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

std :: list <int>的默认构造函数可以抛出吗?

我有一个(快速)查看C++标准和在线C++参考,但我找不到这个简单问题的答案:

可以std::list<int>抛出默认构造函数吗?

如果是这样,为什么会抛出?

c++ exception list default-constructor

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

D编程语言中的Pimpl-idiom

D拥有一个出色的模块系统,与C++相比,它可以大大缩短编译时间.根据文档,D仍然提供不透明的结构和联合,以便启用pimpl习语.我的问题是:如何在一个模块中声明嵌套结构(或联合)并在另一个模块中定义它?那是什么语法?

在C++中,标题看起来像这样

struct S { 
    ... 
    struct Impl; 
    Impl * p; 
};
Run Code Online (Sandbox Code Playgroud)

并且实现文件(cpp-file)将使用一些有趣的::-syntax,如下所示:

#include "header.h"
struct S::Impl { 
    ... 
};
Run Code Online (Sandbox Code Playgroud)

如何在D中实现相同的功能?

d pimpl-idiom

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

为什么std :: future &lt;T&gt;和std :: shared_future &lt;T&gt;不提供成员swap()?

C ++标准库中的所有类都有成员交换函数,包括一些多态类,例如std::basic_ios<CharT>。模板类std::shared_future<T>显然是一个值类型,并且std::future<T>是仅移动值类型。是否有任何特定原因,它们不提供swap()成员函数?

c++ swap future c++11

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

如何为 C# 调试设置环境变量

我正在尝试将托管和本机 dll 加载到我的 C# 应用程序中。我想设置 PATH 环境变量,以便应用程序可以找到要加载的 dll。在 C++ 中这很容易,但我如何在 C# 项目中做到这一点?(顺便说一下,我使用的是 VS2012、.NET、WPF)

c# debugging dll path-variables environment-variables

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

如何在现有Windows应用程序中获得ATL支持

我正在使用Visual Studio 2012中的Qt 5.3.1构建应用程序.我还想使用一个硬件库,它要求我向项目添加一个简单的ATL对象.这可以通过使用Visual Studio向导来完成.向导抱怨我的项目既不是MFC可执行文件也不是具有完全ATL支持的MFC DLL.

我的问题是:如何将此支持添加到我的应用程序中?在项目属性中,我将项目配置为链接到ATL并使用MFC.那没起效.静态和动态.

如果有另一个解决方案是为了向项目添加一个简单的ATL对象,请告诉我.

c++ com mfc atl

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

没有传递内存的纯粹和非运行功能是否会自动收集垃圾?

假设你有d是一个函数pure,并nothrow通过它的返回类型和参数类型不能通过任何新分配的内存.我可以将@nogc属性添加到此功能吗?如果没有,将来有可能实现这一目标吗?

我的观点如下:由于该函数没有任何可见的副作用,因此在函数退出时可以确定地释放在路上分配的所有内存.因此,实际上不需要GC,因为可以避免标记和扫描步骤.或者不可以吗?

garbage-collection d purely-functional

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

std :: make_unique SFINAE友好吗?

我正在做一些模板元编程,我想实现一个通用的克隆函数,它根据SFINAE表达式的有效性选择克隆方法(替换失败不是错误).

这个参考网站上它说

功能

make_unique<T>( std::forward<Args>(args)... )
Run Code Online (Sandbox Code Playgroud)

相当于:

unique_ptr<T>(new T(std::forward<Args>(args)...))
Run Code Online (Sandbox Code Playgroud)

这是否意味着以下代码

template <typename T>
auto my_clone( const T & t ) -> decltype( std::make_unique<T>(t) )
{
    return std::make_unique<T>(t);
}
Run Code Online (Sandbox Code Playgroud)

应完全等同于

template <typename T>
auto my_clone( const T & t ) -> decltype( std::unique_ptr<T>( new T(t) ) )
{
    return std::unique_ptr<T>( new T(t) );
}
Run Code Online (Sandbox Code Playgroud)

即使我有其他功能的重载my_clone?换句话说:std::make_unique() SFINAE友好吗?

如果T没有拷贝构造的,那么后者的代码不会因SFINAE参与重载决议.

这是一个小例子,无法在启用C++ 14的GCC 5.3上编译:

#include <memory>

// It does **not** work with this snippet:
template …
Run Code Online (Sandbox Code Playgroud)

c++ sfinae unique-ptr c++11

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

如何创建1970年1月1日00:00:00的std :: chrono :: time_point?

是否有符合便携式标准的方法来创建1970年1月1日00:00:00的std :: chrono :: time_point?这必须是线程安全的.因此,解决方案应该避免类似的功能std::gmtime(),std::localtime()并且没有线程安全保证.

这不是将std :: chrono :: time_point转换为unix时间戳的重复,因为我要求一个线程安全可移植解决方案.那里的问题也没有要求,答案也没有提供这种保证.

c++ time c++-chrono

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

我应该在析构函数中写下文件的结尾吗?

我有一些看起来有点像这样的代码:

void writeToStream( std::ostream & outputStream )
{
    MyXmlWriter xmlWriter{ outputStream };
    xmlWriter.addNode();
    xmlWriter.addNode();
    xmlWriter.close(); // should this be called in `MyXmlWriter` destructor?
}
Run Code Online (Sandbox Code Playgroud)

close函数会写一些xml关闭标记,以便正确解析文件.构造函数编写xml文件的标头.人们可以考虑xmlWriter.close();清理代码.C++的常见建议是将清理代码放入析构函数中.这样你就永远不会忘记清理干净.但是,在我们的例子中,清理代码可能会抛出.(想象一下,file可能启用了异常,对文件的写入可能会失败.)因此,如果close()在析构函数中调用该函数,那么它应该包装在try-catch块中,该块会占用抛出的所有异常:

MyXmlWriter::~MyXmlWriter() 
{
    try
    {
        close();
    }
    catch (...)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,在这种情况下,呼叫者不会收到有关任何错误的通知.该函数writeToStream()可能无法将关闭的xml标记写入文件,而调用者不知道它.在这种情况下,最佳做法是什么?

c++ file-io destructor exception-safety

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