草庐IT

c++ - 如何为 string_view 创建 (VC14) 调试可视化工具?

我正在使用boost::string_view。(www.boost.org/doc/libs/1_61_0/boost/utility/string_view.hpp)它有一个constchar*ptr_和一个unsignedintlen_数据成员。当调试它很麻烦时,因为默认的可视化工具将显示字符ptr_的字符数多于长度(因为string_view不是空终止的)。我尝试通过查看std::string可视化工具来创建自己的可视化工具。如果我对长度进行硬编码(比如说4),我可以获得要显示的字符串,但是我无法让它使用实际的长度变量。任何帮助表示赞赏。损坏的例子:{ptr_,4}//work

c++ - 在 C++11 中为包含 std::tuple 的对象键入删除

假设我有一个通用类Container,它包含任何类型的元组,并且有一个函数templateT&get();返回对元组中元素的引用。我非常简单的实现如下所示:templateclassContainer{std::tuplecontents;public:Container(constTs&...ts):contents(ts...){}templateT&get(){//TypeIndexissomemeta-programmingstructtofindindexofTinTsreturnstd::get::value>(contents);}};有没有什么好的类型删除技术可以在不改

C++11 复制省略号和异常(catch 参数)

在代码审查之后,我们在try/catchblock中遇到了复制elison的问题。阅读此页面后:cppreferenceguide特别是这一段:Whenhandlinganexception,iftheargumentofthecatchclauseisofthesametype(ignoringtop-levelcv-qualification)astheexceptionobjectthrown,thecopyisomittedandthebodyofthecatchclauseaccessestheexceptionobjectdirectly,asifcaughtbyrefer

c++ - 默认初始化(c++14)时是否对 POD 进行了特殊处理?

为什么下面的代码产生0作为输出?在我的理解中,它是默认初始化(不是值初始化),所以值应该是随机的。#include#include#includeusingnamespacestd;structA{inti;intj;};intmain(){Aa;cout来自cppreference:默认初始化的效果是:如果T是非POD(C++11前)类类型,则考虑构造函数并对空参数列表进行重载决议。调用选择的构造函数(默认构造函数之一)为新对象提供初始值;如果T是数组类型,则数组的每个元素都被默认初始化;否则,什么都不做:具有自动存储持续时间的对象(及其子对象)被初始化为不确定的值。

c++ - 使用 C++14 lambda 测量任意函数的执行时间

ScottMeyer的书“EffectiveModernC++”中的第24条让我很兴奋。他提到了编写C++14lambda来记录任意函数调用所用时间的可能性。我仍处于学习C++14功能的早期阶段。我的尝试(Main.cpp)看起来像这样用于测量成员函数调用的时间:#include#includeautomeasure=[](auto&&function,auto&&...parameters)->decltype(function){conststd::chrono::steady_clock::time_pointstartTimePoint=std::chrono::steady_

c++ - const_cast 在常量表达式中有效吗? (C++14, C++17)

a遇到的具体问题是编译器处理它的方式存在一些不一致。例如这段代码(https://godbolt.org/z/08Z-zi):constexprautovalue=1;static_assert(*const_cast(&value),"valueshouldbe1");使用GCC、Clang和MSVC编译良好,但使用英特尔C++编译器19.0.1失败并出现以下错误:error:expressionmusthaveaconstantvaluestatic_assert(*const_cast(&value),"valueshouldbe1");据我所知,标准并未明确声明常量表达式中不允

c++ - 我如何使用 11 位数字

我想在我的变量-number中输入一个11位数字,但我认为没有那么多内存。我尝试使用*number和int*number=newint[100],但它不起作用。我还想在我的变量-name中添加姓名和姓氏,但每次我使用空格时,它也会停止工作。我该如何解决这些问题?#include#includeusingnamespacestd;structNOTE{stringname;intnumber;intbirthday[3];};intmain(){//int*tel=newint[100];//int*ptr=newint;NOTEarr[3];cout>arr[i].name;cout>

C++ 11新特性之可变参数模板

概述        随着C++11标准的发布,C++语言获得了许多强大的新特性,其中一项显著提升灵活性和实用性的创新便是可变参数模板。这一特性极大地扩展了模板在处理不定数量类型或值参数时的能力,为开发者提供了更为强大且灵活的泛型编程工具。工作机制        在C++11之前,模板参数的数量必须是固定的。这意味着,对于那些需要处理任意数量参数的情况,程序员不得不采用一些间接手段,比如:重载函数或模板特化。然而,可变参数模板允许编译时传递任意数量的类型或对象到模板中。        学习C++的人应当对printf非常熟悉,printf的一个特点就是它的参数个数是可变的。而在C++11中,则允

c++ - Direct3D11(C++) : Rendering (basic) question

我一直在关注一本关于使用D3D11进行游戏编程的基础知识的书。我现在了解Direct3D的绝对基础知识:)但是……我有一个问题。在书中,我总是不得不一次制作一个演示。现在,我正在尝试用它制作2D游戏。因为我不想习惯坏习惯所以我需要你的建议。在书中,我总是必须定义一个(结构VertexPos与texcoord和位置成员)或(结构VertexPos只有一个XMFLOAT3位置成员)。在我制作的游戏中,我希望能够绘制没有纹理的实体表面和有纹理的表面。我不确定如何做到这一点,更不用说高效地做到这一点了。这是我的渲染函数:voidGameSpriteDemo::Render(){if(m_pD3

c++ - Direct3D11(C++) : Updating Texture coordinates in constant buffer?

我正在尝试使用Direct3D制作一个相当基本的2D引擎。我制作了一个LoadImage()函数,它将图像的所有相当静态的行为存储在一个对象中。(着色器、顶点缓冲区、采样器等)我计划在常量缓冲区中使用矩阵定位顶点。但是,我还想有一个DrawImage()函数,它有一个参数来告诉纹理的哪一部分应该被绘制(剪裁),所以我必须更新纹理坐标。由于顶点缓冲区已经预定义,我想知道是否有一种方法可以通过发送到顶点着色器的常量缓冲区来更新纹理坐标?我希望我的问题足够清楚,如果您有任何疑问,请查看下面的代码。boolGameManager::GMLoadImage(Image*pImage,constc