草庐IT

DirectX11

全部标签

C++11 - 编译时多态性解决方案

假设我正在编写一个跨平台库,我必须以不同平台有不同行为的方式组织代码,并且这种行为(或定义)是在编译时根据平台选择的我的图书馆正在编译。在C++中执行此操作的“通常”方法是在编写方法或类时用大量#ifdef污染代码。方法的问题在于:源代码看起来真的很丑如果您支持3个平台,您的源代码大约比您真正需要的大3倍,这意味着您的编译器仍然需要解析和分析所有代码才能“看到”#ifdef不同的实现之间没有真正的区别,当代码库增长时很难维护,而当你只有3-4个平台时,它增长得非常快。由于C++11中有很多新特性,我想知道是否有什么改变,是否有新的选项。 最佳答案

c++ - 抢占式多任务处理是否会干扰 C++11 发布-获取语义?

线程是否有可能(理论上)在一个CPU上执行acquire,然后立即被抢占并在另一个从未执行过acquire的CPU上恢复执行(因此从不根据发布-获取语义同步)?例如。考虑以下代码,它使用C++11原子和release-acquire内存排序来执行无锁线程安全初始化:if(false==_initFlag.load(memory_order_acquire)){_foo=...;//initializeglobal_bar=...;//initializeglobal...=...;//initializemoreglobals_initFlag.store(true,memory_or

非 C++11 程序中的 C++11 代码/库

假设我将C++11中的代码(我将使用Lambdas)编译为“.o”或库“.a”。我有一个程序,其中我将包含以前的库和头文件,我不能用C++11编译,但是旧的(C++98)。它会编译并正常工作吗? 最佳答案 如果满足以下条件,它将正常工作:(公共(public))头文件不使用任何C++11特性ABI没有改变就此咨询您的平台/编译器没有共同的依赖关系发生变化根据VaughnCato链接的GCC文档,这包括标准库。任何在使用C++11编译时生成不同代码或对象布局并被库和客户端使用的东西都可能是一个问题……即使它没有在接口(interfac

C++11 在 Visual Studio 2012 中的委托(delegate)构造函数

我正在尝试在VisualStudio2012中使用委托(delegate)构造函数。以下代码在Xcode4.6中编译但在VisualStudio2012中不编译:在.h文件中classErrorReportDlg:publicQDialog{public:ErrorReportDlg(OwlExceptionPtrex,QWidget*parent);ErrorReportDlg(QWidget*parent);virtual~ErrorReportDlg();}在.cpp文件中//FWIW,OwlExceptionPtris//typdefboost::shared_ptrOwlEx

C++11 嵌套 std::conditional

这个表达式有什么问题吗?templateusingaddRefU=typenamestd::conditional::type,typenamestd::conditional::type,typenamestd::add_lvalue_reference::type>>::type;intmain(){std::cout>::value>::valuehttp://coliru.stacked-crooked.com/a/21593805f2c6e634因此,它根本没有引用。是否不允许嵌套std::conditional? 最佳答案

具有线程安全队列的 C++11 事件循环

我想创建一个事件循环类,它将在它自己的线程上运行,支持将任务添加为std::functions并执行它们。为此,我从这里使用SafeQueue:https://stackoverflow.com/a/16075550/1069662classEventLoop{public:typedefstd::functionTask;EventLoop(){stop=false;}voidadd_task(Taskt){queue.enqueue(t);}voidstart();voidstop(){stop=true;}private:SafeQueuequeue;boolstop;};voi

c++ - 将局部变量分类为 C++11 之前的谓词

以下代码在使用GCC和Clang以C++11模式构建时编译时没有错误/警告。但是,如果我尝试在没有C++11模式的情况下进行编译,并且在第二个范围内发生错误。#include#includestructastruct{intv;};structastruct_cmp0{booloperator()(constastruct&a0,constastruct&a1){returna0.valist;{//Works-noerrorsstd::stable_sort(alist.begin(),alist.end(),astruct_cmp0());}{structastruct_cmp1{

c++ - 如何在 MSVC 下检测 C++11 的 noexcept 特性?

我正在使用C++库。该库的最低要求是C++03。我在VisualStudio2015下发现了一些关于抛出析构函数的警告:...algparam.h(271):warningC4297:'AlgorithmParametersBase::~AlgorithmParametersBase':functionassumednottothrowanexceptionbutdoes...algparam.h(271):note:destructorordeallocatorhasa(possiblyimplicit)non-throwingexceptionspecificationthrow是

c++ - 使用 Qt::X11BypassWindowManagerHint 标志时窗口没有获得焦点

我需要创建窗口,它始终保持在顶部,没有边框和控件。所以我这样做了:MainWindowwindow;window.show();MainWindow类如下所示:MainWindow::MainWindow(QWidget*parent):QWidget(parent,Qt::Window|Qt::WindowStaysOnTopHint|Qt::X11BypassWindowManagerHint|Qt::FramelessWindowHint){}voidMainWindow::keyPressEvent(QKeyEvent*event){if(event->key()==Qt::K

C++11 自动/我不明白的东西

好的。这是我的代码:CShop::~CShop(){TPacketGCShoppack;pack.header=HEADER_GC_SHOP;pack.subheader=SHOP_SUBHEADER_GC_END;pack.size=sizeof(TPacketGCShop);Broadcast(&pack,sizeof(pack));GuestMapType::iteratorit;it=m_map_guest.begin();while(it!=m_map_guest.end()){LPCHARACTERch=it->first;ch->SetShop(NULL);++it;}M