草庐IT

dynamic_casting

全部标签

c++ - 当 static_cast'ing 为仅移动类型时,Clang 与 GCC

考虑以下简单的仅移动类:structbar{constexprbar()=default;bar(barconst&)=delete;bar(bar&&)=default;bar&operator=(barconst&)=delete;bar&operator=(bar&&)=default;};现在,让我们创建一个包装器:templatestructbox{constexprbox(T&&x):_payload{std::move(x)}{}constexprexplicitoperatorT()&&{returnstd::move(_payload);}private:T_payl

c++ - 如何使用 numeric_cast 策略?

所以我有自己的uint64_t到uint32_t数字转换策略structMyOverflowHandlerPolicy{voidoperator()(boost::numeric::range_check_result){std::cout如何让boost::numeric_cast使用它? 最佳答案 为了使用numeric_cast,numeric_cast_traits特化应该在每个类型转换上定义。这些特化已经为内置数字类型定义了默认值。可以通过定义BOOST_NUMERIC_CONVERSION_RELAX_BUILT_IN_

c++ - 如何在没有 reinterpret_cast 的情况下使用 dlsym() 加载函数?

我正在尝试使用clang-tidy来执行C++核心指南。虽然它确实有很多有效点,但有一件事我无法真正解决:dlsym返回一个void*,我需要以某种方式将其转换为适当的函数指针。为此,我使用了reinterpret_cast。由于准则禁止这样做,因此我对此提出了警告。当然,我可以在任何地方放置//NOLINT注释,但我正在寻找一种不使用reinterpret_cast的解决方案,这样警告就会消失。这个问题有什么解决方法吗? 最佳答案 除了reinterpret_cast之外,该语言没有其他方法可以将函数指针类型转换为对象指针类型。这

c++ - 将 boost::lexical_cast 与 std::transform 一起使用

g++不喜欢:vectorx;x+=1,2,3,4,5;vectory(x.size());transform(x.begin(),x.end(),y.begin(),lexical_cast);错误信息是:error:nomatchingfunctionforcallto'transform(__gnu_cxx::__normal_iterator>>,__gnu_cxx::__normal_iterator>>,__gnu_cxx::__normal_iterator,std::allocator>*,std::vector,std::allocator>,std::allocat

c++ - 将 lexical_cast 用于无符号类型时检查负值

我有一种情况,我正在获取命令行参数并使用boost::lexical_cast(my_param).我希望my_param的负值会导致lexical_cast抛出,但它会愉快地转换它们,-1变成18446744073709551615.这看起来很荒谬,因为unsignedlong的最大值是2^32-1,它看起来更像是unsignedlonglong。所以我正在寻找一种更智能的方法来将char*输入转换为unsignedlong,或者一种方法来验证我没有接受伪装成大unsignedlonglong的负值。 最佳答案 有一个错误报告反对

c++ - std::chrono::duration_cast 1 秒和 2 秒的奇怪结果

我正在运行一个简单的程序,其中,我使用system_clock::now获取一个time_point,然后使用this_thread::sleep_for(seconds(1))和time_point与system_clock::now。现在,如果我向第一个time_point添加一些额外的duration,它会在1秒和2秒内给出完全相同的结果!这是democode:#include#include#includeusingnamespacestd;voidCheckDuration(std::chrono::durationseconds){autostart=std::chrono

c++ - dynamic_cast 发出 : typeid object is not equal, 但名称相同

我发现dynamic_cast在我预期的情况下没有工作,并查看typeid运行时的对象使情况变得更加不清楚。我只想要从基础到派生的转换,但我不明白为什么它不起作用。我有一个类似这样的类结构:classBoundaryCondition{public:virtualvoidDoSomething()=0;virtual~BoundaryCondition(){/***/}}classReflectingBc:BoundaryCondition{public:virtualvoidDoSomething();}classMarshakBc:BoundaryCondition{public:

c++ - reinterpret_cast unsigned char* as uint64_t* - 这是 UB 吗?

假设我们采用一个非常大的unsignedchar数组。std::arrayblob;//...fillarray...(注意:它已经对齐了,问题不在于对齐。)然后我们将其作为uint64_t[]并尝试访问它:constautoptr=reinterpret_cast(blob.data());std::cout转换为uint64_t然后从中读取对我来说看起来很可疑。但是UBsan,-Wstrict-aliasing并没有触发它。Google在FlatBuffers中使用了这种技术.此外,Cap'n'Proto使用此too.这是未定义的行为吗? 最佳答案

ios - 自定义和 "dynamic"通知声音的解决方法

来自appledocumentation,我们可以阅读ForremotenotificationsiniOS,youcanspecifyacustomsoundthatiOSplayswhenitpresentsalocalorremotenotificationforanapp.Thesoundfilesmustbeinthemainbundleoftheclientapp.我的应用程序围绕通知发展,就像许多其他应用程序一样,我真的很希望能够在以后添加声音,或者至少能够对它们进行某种控制。最好的情况是:启动时,我的应用会在线检查声音数据库并下载任何更新。但很明显,如果所有的声音都必须

ios - Firebase Dynamic Link 无法直接打开应用

根据Firebase文档,我在Firebase控制台中创建动态链接,然后在我的应用中包含动态链接SDK。一切都很好,但是当我从Facebook或Messenger单击共享链接(这是我的动态链接)时,它会弹出一个带有打开应用程序按钮的页面,并询问我是否要打开我的应用程序。我没有制作此页面。我想删除它。但我点击备忘录中的链接,它会打开我的应用程序并直接转到正确的页面。我想要与共享链接相同的方式。这是我的代码,我使用带有Objective-c的Xcode来开发iOS应用程序。谢谢!Appdelegate.m-(BOOL)application:(UIApplication*)applicat