草庐IT

any_cast

全部标签

c++ - 为什么我需要从 `long &` 到 `int &` 的 reinterpret_cast,两者都是 32 位 (Windows LLP64)?

我在跨平台环境中使用Qt。我们遇到了以下问题:在Windows上,int和longint都是32位整数;在64位MacOS和Linux上,int是32位的,longint是64位的(参见https://en.wikipedia.org/wiki/64-bit_computing#64-bit_data_models)。因此,跨平台库倾向于提供它们自己的固定位类型定义。在Windows上,Qt将quint32定义为unsignedint并且不使用unsignedlong整数。另一个库将其Uint32定义为unsignedlong。因此,两者实际上都是32位无符号整数,但具有不同的原始数据

c# - 扩展 Mono C# 编译器 : is there any documentation or precedent?

我目前正在参与一些有趣的编程语言研究,到目前为止,这些研究一直围绕着使用一些非常强大的基于程序员生产力的功能扩展即将推出的Java7.0编译器。该作品应同样适用于相关编程语言,如C#。我目前正在确定用于对功能的C#端口进行原型(prototype)设计的选项。我更喜欢开源选项,这样这项工作的成果就可以与尽可能多的观众分享。因此,MonoC#编译器似乎是最明显的起点。我是一位经验丰富的C#开发人员,因此编写代码不是问题。我主要关心以可维护和受支持的方式扩展编译器。在有关该主题的MonoFAQ(link)中指出“Mono已被用作尝试C#语言新想法的基础(有三四个编译器派生自Mono的C#编

c++ - 如何很好地将 "cast"qint64 转换为 QProgressBar 的 int

我正在使用QFtp(是的..我知道)并且一切正常。使用他们自己示例中的代码作为指导。http://doc.qt.io/archives/qt-4.7/network-qftp-ftpwindow-cpp.html我遇到的唯一问题是在发送(或接收)大文件(比如3GB)时进度条出现故障。这是由于从qint64到int的转换:voidFtpWindow::updateDataTransferProgress(qint64readBytes,qint64totalBytes){progressDialog->setMaximum(totalBytes);progressDialog->setV

C++ 是否 reinterpret_cast 总是返回结果?

我有两个类,A和B。A是B的父类,我有一个函数接收指向A类型类的指针,检查它是否也是B类型,如果是将调用另一个函数,该函数接受一个指向类型B的类的指针。当函数调用另一个函数时,我提供reinterpret_cast(a)作为参数。如果这看起来模棱两可,这里有一个代码示例:voidabc(A*a){if(a->IsA("B")){//pleasedontworrymuchaboutthisline,//myrealconcernisthereinterpret_castdef(reinterpret_cast(a));};};现在您知道我是如何调用“def”的了,我想知道reinterp

c++ - 如何避免在 C++ 中将 const_cast 与 std::vector::erase() 一起使用?

我有这样一个类:templateclassAdjacencyList{public:voiddelete_node(constT&);protected:consttypenamestd::vector::const_iterator_iterator_for_node(conststd::vector&,constT&);};templatevoidAdjacencyList::delete_node(constT&node){_nodes.erase(_iterator_for_node(_nodes,node));}templateconsttypenamestd::vector

c++ - Boost::any 和多态性

我正在使用boost::any来存储指针,想知道是否有一种提取多态数据类型的方法。这是一个简单的示例,说明理想情况下我想做什么,但目前行不通。structA{};structB:A{};intmain(){boost::anya;a=newB();boost::any_cast(a);}这失败了,因为a正在存储一个B*,而我正在尝试提取一个A*。有办法实现吗?谢谢。 最佳答案 Boost.DynamicAny是Boost.Any的变体,它提供更灵活的基础类型动态转换。从Boost.Any中检索值需要您知道存储在Any中的确切类型,而

c++ - 使用默认值而不是异常来 boost numeric_cast<>?

每当boost的numeric_cast转换失败,抛出异常。boost中是否有类似的模板让我指定一个默认值,或者在这种情况下捕获异常是我唯一能做的?我不太担心所有额外异常处理的性能,但我宁愿使用标准模板也不愿编写无用的包装函数。另外,根据以往的经验,我认为boost很有可能真的有我想的,只是一直没有找到。 最佳答案 numeric_cast函数只是调用boost::numeric::converter具有默认参数的模板类。其中一个参数是OverflowHandler,默认值为def_overflow_handler,但您可以指定si

C++ 编译错误 : "cast from ' WCHAR *' to ' WORD' loses precision"

MyGUI库。源码中有一行:mHandle=(size_t)::LoadCursor(NULL,MAKEINTRESOURCE(IDC_ARROW));mHandle是size_tLoadCursor返回HCURSOR。错误:D:\Dev\MyGUI_3.2.0_RC1\Common\Input\Win32\ResourceW32Pointer.cpp:48:error:castfrom'WCHAR*'to'WORD'losesprecision这是完整的来源:www.pastebin.com/gzqLBFh9MinGW编译器。有错误castfrom'CHAR*'to'WORD'los

c++ - 模板特化 : does not match any template declaration

我在学习模板特化的时候,用了一个很简单的例子,但是还是报错。#includetemplateclasschrrr{public:Tchgchr(Tc);};templateTchrrr::chgchr(Tc){returnc+1;}templateclasschrrr{public:charchgchr(charc);};templatecharchrrr::chgchr(charc){returnc+2;}usingnamespacestd;intmain(){chara='a';inti=1;chrrrit;chrrrch;cout错误说:line20:error:template

c++ - constant 和 reinterpret cast 是否在编译时发生?

我读到过static_cast发生在编译时,dynamic_cast发生在运行时,因此比static_cast慢。dynamic_cast可以返回空指针(当与指针一起使用时)或以其他方式抛出错误的转换异常。我的问题是reinterpret_cast和const_cast是发生在编译时还是运行时?我认为解释转换发生在运行时,因为它的行为类似于dynamic_cast指示转换是否成功。我对么?const_cast是编译时间吗? 最佳答案 动态转换是唯一需要在运行时“计算”的。所有其他类型转换均在编译时计算。static_cast的机器代