小编cpp*_*guy的帖子

一种确定成本最低的参数类型的编译时方法

我有一个看起来像这样的模板

template <typename T> class Foo
{
public:
    Foo(const T& t) : _t(t) {}
private:
    const T _t;
};
Run Code Online (Sandbox Code Playgroud)

在参数类型像 bool 或 char 这样微不足道的情况下,是否有一种精明的模板元编程方法可以避免使用 const 引用?喜欢:

Foo(stl::smarter_argument<T>::type t) : _t(t) {}
Run Code Online (Sandbox Code Playgroud)

c++ stl

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

如何阻止回车键关闭我的QDialog(Qt 4.8.1)

我有QDialog一个QDialogButtonBox." 确定"和" 取消"按钮处于活动状 有时我会根据对话框的状态禁用或隐藏"确定"按钮.看来,无论我做什么,Enter键总是激活OK按钮.我真的不希望这种情况发生.我试过了:

  • 每次显示/隐藏/启用/禁用/无论按钮时,都将default和autoDefault属性设置为false
  • 在OK按钮上安装事件过滤器,以拦截返回,输入和空格的键事件(按下和释放)
  • 将按钮上的焦点策略设置为NoFocus

并且通过上述所有组合,Enter键仍然接受对话框.有没有人知道如何阻止这个?看起来我应该能够阻止这么简单的事情吗?

c++ qt qdialog qpushbutton

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

为什么我不能在设计器的QStackedWidget中为页面设置布局?

在Qt 4.8.0的设计器中重现的步骤

  • 我在Qt Designer中创建了一个新的对话框表单
  • 我在对话框中添加了一个QStackedWidget
  • 我设置对话框的布局,使对话框的堆叠布局大小
  • 我在堆叠小部件中向第一页添加了一些控件
  • 我在控件的右侧树视图中选择堆叠小部件中的第一页
  • 该页面旁边的图标(这是一个QWidget)显示页面缺少布局

当我单击上面的一个布局按钮时,它不会更改页面QWidget的布局,即使我已经明确选择了页面,它也会更改对话框的布局.

这是设计师的错误吗?我错过了什么吗?我真的不想以编程方式添加布局,因为这使我无法在同一.ui文件中布局设计器中的页面

layout user-interface qt4 qt-designer qstackedwidget

11
推荐指数
2
解决办法
7042
查看次数

是否有const构造函数这样的东西?

今天我不小心把const我的构造函数的开头(复制粘贴错误)和它编译.我只在Visual Studio 2008中尝试过这个,它是C++ 11之前的版本.这种语法有什么意义吗?这是微软的早期尝试constexpr吗?

class foo
{
public:
    const foo(int i){}
};

foo f(1);
Run Code Online (Sandbox Code Playgroud)

c++ visual-studio

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

从Jam迁移到CMake

我理解Jam构建现有项目,CMake生成要构建的项目.但是,鉴于我宁愿生成可以在各种IDE中使用的项目,而不是尝试将Jam集成到那些IDE中,有没有人有任何经验/成功将Jamfile转换为CMakeLists.txt文件?

cross-platform cmake jam bjam

5
推荐指数
2
解决办法
2577
查看次数

在Visual Studio 10项目中一起使用/ YC和/ MP

我试图绕过/ YC和/ MP的限制互相排斥.我想利用预编译头和多进程编译.

到目前为止我的答案是创建2个项目而不是1.第一个是pch生成库,它只包含stdafx.h和stdafx.cpp.它使用stdafx.cpp上设置的/ YC生成pch文件

该库成功生成pch文件!作为旁注,pch库项目还指定了/ YU指向其stdafx.h和/ Fp引用输出pch文件.

我的第二个项目是我的主要可执 它具有/ MP指定但没有为任何文件指定/ YC,并且不包含stdafx.h或stdafx.cpp.相反,我将项目的/ YU设置为pch库的stdafx.h,将/ Fp设置为pch库生成的pch.然后我将pch库设置为exe项目的依赖项.我还在exe项目上设置了/ FI,强制从每个编译单元的pch库中包含stdafx.h.

我的问题是,虽然pch库生成了pch文件,并且exe项目似乎确实正确地引用了生成的pch文件,但是一旦exe项目开始构建(在与pch无关的一些预构建步骤之后),它删除了pch库生成的pch.我想这是因为它认为,如果指定了/ Fp,即使没有指定/ YC,项目也会生成该文件.

我有什么问题吗?我错过了一步.有没有办法阻止exe项目在开始构建之前删除我的pch文件?

任何帮助将不胜感激!

c++ winapi visual-studio-2010 precompiled-headers visual-studio

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

C和C++中的初始化列表

出于某种原因,我有这样的想法,C和C++的工作原理如下:

int foo[10] = {57};
for (int i=0; i<10; ++i)
    assert (foo[i] == 57);
Run Code Online (Sandbox Code Playgroud)

原来剩下的整数被初始化为0而不是57.我从哪里得到这个想法?这一点是真的吗?结构初始化列表是否真的如此?当分配给= {}和= {0}时,数组和结构是否整齐且正确地开始将自己初始化为0值?除非明确说明,否则我一直认为他们会初始化为垃圾.

c c++ initializer-list

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

模板的静态成员是全局唯一的吗?

看看现在可用的答案,我仍然不确定答案是什么.这是我的例子

// foo.h
template <class T> class foo
{
public:
    static T t;
};
template <class T> T foo<T>::t = 0;

// a.cpp
#include "foo.h"
foo<int> fa;

// b.cpp
#include "foo.h"
foo<int> fb;

// c.cpp
#include "foo.h"
foo<int> fc;

int main (int argc, char* argv[])
{
    fc.t = 5;
}
Run Code Online (Sandbox Code Playgroud)

这是否意味着fa.t和fb.t也是5?如果语法不正确,请告诉我.

c++ templates static-members

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

当另一个成员存在另一个签名时,调用纯虚拟成员的正确方法是什么?

我有一个纯虚拟接口类和一个看起来像这样的派生类

class IInterface
{
public:
    virtual void func() = 0;
};

class MyClass : public IInterface
{
public:
    void func(int i) { func(); }
};
Run Code Online (Sandbox Code Playgroud)

编译器抱怨对func()in 的调用func(int i)不带0个参数.指定调用纯虚拟成员的正确方法是什么?

我提出的两个解决方案是

void func(int i) { static_cast<IInterface*>(this)->func(); }
Run Code Online (Sandbox Code Playgroud)

void func(int i) { IInterface::func(); }
Run Code Online (Sandbox Code Playgroud)

这些都可行吗?有没有更好的办法?两者看起来都很笨拙.

c++ inheritance pure-virtual

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