我有一个虚拟基类函数,永远不应该在特定的派生类中使用.有没有办法'删除'它?我当然可以给它一个空的定义,但我宁愿让它尝试使用抛出编译时错误.C++ 11 delete
说明符似乎是我想要的,但是
class B
{
virtual void f();
};
class D : public B
{
virtual void f() = delete; //Error
};
Run Code Online (Sandbox Code Playgroud)
不会编译; gcc,至少,明确地不允许我删除具有未删除的基本版本的函数.有没有其他方法来获得相同的功能?
我正在使用Qt 4.8.3和QtCreator,我根据这里的说明使用msvc2010编译.然而,现在我需要链接到GSL(Gnu科学图书馆),但是目前我只知道如何使用g ++构建它,正如此处所描述的那样产生链接器错误,这无疑是出于@EvanTeran答案中给出的原因.然而,在我的情况下,通过Cygwin构建Qt使用g ++可能不是一种选择-从来就刚刚结束了在此期间,我试着做只是这多天的噩梦,但不能作为记录在这里.当然有一种方法可以用msvc2010构建gsl,但是怎么样?我安装了VS 2012 Express(虽然我之前从未使用过),以防有使用它的解决方案.
编辑:看看CMake,我最好能够为GSL手动创建CMakeLists.txt文件的整个层次结构.这只是有点太多,所以我放了100pt.关于上述问题的赏金.解决我的问题Visual Studio路由(这里)或与g ++将得到赏金和两个问题的答案.
更新: 下面的答案工作得很好,但不是无缝的,可能是因为我实际上需要在VS2012下编译.需要对代码进行一些调整,例如显式强制转换,在前一个编译器中显然可以容忍,但不是我的.事情进展顺利.
我想要我正在制作的绘图的轴标签,自然地,y轴标签应该垂直定向.我很确定QwtPlot
这样做,但是我试图保持清淡,所以我现在只使用一个简单的QWidget
+ QPainter
.我没有看到任何改变QLabel
文档方向的方法.在2002年的线程中给出了一些解决方案但是我想要的东西看起来不像是一个黑客.我现在正在使用Qt 4.8,除此之外真的没办法做到这一点QPainter::drawText()
吗?
我没有听到关于RTOS的好消息 - 它们让程序员更好地控制调度程序,以便例如避免优先级倒置,它们的时序更加一致,更好的多任务处理.但是所有标准桌面设置都使用非实时操作系统.因此,使用RTOS必须有一些权衡,它们是什么?
简而言之:
救命!在我的环境中,某些东西必须是不相容的,但它可能是什么?
因此,我需要在Windows上使用C++ 11开发64位Qt应用程序.我在这里,这里,这里,这里和这里找到了线程/指南,并且它们都没有工作或应用,但我注意到其中的第二个让我构建Qt 4.8.3并支持C++ 11(但是32位).第三个看起来比它应该更复杂,并且还涉及使用VS 2010构建,这似乎是问题的一部分,所以我没有尝试过.我也浪费了很多时间尝试用不同的编译器构建以前的版本,比如mingw和clang,所以我很确定cl是我需要使用的.
基本上,我已经到了可以构建Qt4.8.3并从QtCreator 2.6.1中执行64位应用程序的地步,但我无法获得完整的C++ 11支持.它只找到来自VS 10.0的cl,它只支持非常有限的C++ 11.弄清楚如何让它从VS 11.0使用cl将是我的问题的一个解决方案.但是,当我尝试
QMAKE_CXX = C:/ Program Files(x86)/ Microsoft Visual Studio 11.0/VC/bin/cl
构建失败并显示jom
错误2,如果我选择构建选项,则会nmake
出现类似错误.
Qt 5应该具有完整的C++ 11支持.但是当我尝试从源代码自己构建它时,它失败了.原因似乎是,尽管从VS2012 x64交叉工具命令提示符运行configure/make,-platform win32-2012
在配置步骤中指定,并QMAKE_COMPILER_DEFINES += _MSC_VER=1700 WIN32
根据
本指南指定,在win32-msvc2010和win32-msvc2012 mkspecs中,它仍然构建来自VS 2010的cl,这引起了某种冲突.这是我的configure
命令:
configure -static -debug-and-release -confirm-license -opensource -nomake tests -nomake exampmles -opengl desktop -no-libjpeg -platform win32-msvc2012
这是我尝试构建时链接器失败:
在顶部2段落结束时,你可以看到被纳入该MSVC-2010,和更早在控制台输出(未显示)存在-D_MSC_VER=1600
的moc …
A,B和C是某些无符号整数类型的变量.从概念上讲,A是测试向量,B是"必需"位的位掩码(必须设置A中的至少一个对应位),并且C是"禁止"位的位掩码(可以不设置A中的相应位).因为我们正在混合按位和逻辑运算符,否则看起来很自然的解决方案
A & B & ~C
Run Code Online (Sandbox Code Playgroud)
是不正确的.相反,标题表达式等同于伪代码
((a0 & b0) | ... | (an & bn)) & (~(a0 & c0) & ... & ~(an & cn))
Run Code Online (Sandbox Code Playgroud)
其中a0
,等等表示各个位(并且n
是最高位的索引).我没有看到如何有效地重新排列这个并提取相应的代码但是,有没有一种聪明的方法,也许有^
,简化标题中的表达式?
编辑:提示@ huseyintugrulbuyukisik的问题我注意到我们可以假设(B & C) == 0
,但我不知道这是否有帮助.
编辑2:结果:这取决于分支预测的好坏!
#include <chrono>
#include <cmath>
#include <iostream>
#include <vector>
using UINT = unsigned int;
int main(void)
{
const auto one = UINT(1);
const UINT B = (one << 9); // Version 1
// const UINT B = (one …
Run Code Online (Sandbox Code Playgroud) 我有一个容器(C++),我需要以两种方式操作,来自不同的线程:1)添加和删除元素,以及2)遍历其成员.显然,在迭代发生时删除元素=灾难.代码看起来像这样:
class A
{
public:
...
void AddItem(const T& item, int index) { /*Put item into my_stuff at index*/ }
void RemoveItem(const T& item) { /*Take item out of m_stuff*/ }
const list<T>& MyStuff() { return my_stuff; } //*Hate* this, but see class C
private:
Mutex mutex; //Goes in the *Item methods, but is largely worthless in MyStuff()
list<T> my_stuff; //Just as well a vector or deque
};
extern A a; //defined in the .cpp file
class B
{
... …
Run Code Online (Sandbox Code Playgroud) 最重要的是,抱歉我的英语不好.
我有这个数组t
:
array([[ 0, 1, 2, 0, 4, 5, 6, 7, 8, 9],
[ 0, 11, 0, 13, 0, 15, 0, 17, 18, 0]])
Run Code Online (Sandbox Code Playgroud)
我想删除第二行的值为null的列.在这里,我想删除列0,2,4,6和9,以获取此数组:
array([[ 1, 0, 5, 7, 8 ],
[ 11, 13, 15, 17, 18 ]])
Run Code Online (Sandbox Code Playgroud)
我试过np.sum()
但没有成功.
有没有办法初始化函数中的变量并保存其值以进行下一次函数调用?
我在qt中进行应用,我有一个功能与信号连接.我希望该函数中的变量在另一个变量达到目标后发生变化.这是该函数的主体:
void objekt::advance(int phase)
{
if(!phase) return;
QPointF location = this->pos();
if (int(location.x())==200 || int(location.x())==-200)
{
smijer=-smijer;
}
setPos(mapToParent(smijer,0));
}
Run Code Online (Sandbox Code Playgroud)
我将smijer变量定义为static int.但我不知道如何在程序启动时只初始化一次,以及如何在每次调用函数后保持其新值.