草庐IT

boost-implicit-cast

全部标签

c++ - 为什么 Boost MPL 有整数常数?

既然您可以将整数值作为模板参数并对它们执行算术运算,那么boost::mpl::int_和其他整数常量背后的动机是什么?这种动机是否仍然适用于C++11? 最佳答案 您可以将整数值作为模板参数,但您不能在一个模板中同时使用类型和非类型模板参数。长话短说,将非类型模板参数视为类型允许它们与MPL中的无数事物一起使用。例如,考虑一个元函数find它与类型一起使用并在序列中寻找相同的类型。如果您希望将它与非类型模板参数一起使用,您需要重新实现新算法“重载”,find_c为此,您必须手动指定整数值的类型。现在假设您希望它像其他语言一样使用混

c++ - const_cast 的合法用途是什么

因为在const_cast的帮助下,任何人都可以修改我声明的常量对象-const限定符有什么用?我的意思是,有人怎么能确保他声明的const无论如何都不会被修改? 最佳答案 您是对的,const_cast的使用通常表示存在设计缺陷,或者API不受您的控制。但是,有一个异常(exception),它在重载函数的上下文中很有用。我引用了C++Primer一书中的一个例子://returnareferencetotheshorteroftwostringsconststring&shorterString(conststring&s1,c

c++ - boost C++ 无锁队列与共享队列

我是多线程编程的新手,我只知道最常见的Producer-Consumer-Queue。我正在使用boostc++库,我不知道是使用boost::lockfree::queue还是使用`mutex`和`condition_variable`的std::queue周围的包装类更好。哪里使用无锁数据结构更好,哪里使用基于`mutex`和`condition_variables`的简单实现更好? 最佳答案 在您的应用中尝试两者,看看哪个表现最好。通常,轮询无锁队列在队列几乎总是有条目时效果最好,而阻塞队列在队列几乎总是空的时候效果最好。由于

c++ - 为什么人们似乎暗示我宁愿不使用 Boost?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭7年前。Improvethisquestion我经常在这里看到关于boost的注释,例如IfyouarefinewithusingBoost...或IfyoucanuseBoost...我想知道,这到底是怎么回事?我应该厌倦什么?我什么时候不能使用boost?不用boost的原因有哪些?在我看来,boost是对STL的一个很好的扩展;有时非常重量级和笨拙,但仍然很棒。我并不是真的征求有关boost的意见。我宁愿寻找一些具体的例子,在使

c++ - static_cast 可以在 C++ 中抛出异常吗?

假设static_cast永远不会抛出异常是否安全?对于int到Enum的转换,即使无效也不会抛出异常。我可以依赖这种行为吗?以下代码有效。enumanimal{CAT=1,DOG=2};inty=10;animalx=static_cast(y); 最佳答案 对于这种特定类型的转换(枚举类型的组成部分),可能会抛出异常。C++standard5.2.9Staticcast[expr.static.cast]paragraph7Avalueofintegralorenumerationtypecanbeexplicitlyconve

c++ - 什么是 qobject_cast?

谁能用尽可能简单的术语(或尽可能简单)解释什么qobject_cast是,它的作用以及为什么我们需要将一种类类型转换为另一种类类型?比如,我在转换int的意义上进行了类型转换作为char或QString也许使用QMessageBox,但为什么要分到不同的类中呢? 最佳答案 在你开始学习之前qobject_cast也就是说,您需要知道C++的dynamic_cast是什么是。动态Actor就是关于polymorphism.C++的动态转换使用RTTI(运行时类型信息)来转换对象。但是qobject_cast在没有RTTI的情况下执行此

c++ - 如何停止/中断 boost::thread?

我在一个函数中创建了一个线程,在另一个函数中,我想停止这个线程。我试过这样:classServer{private:boost::thread*mPtrThread;...public:voidcreateNewThread(){boost::threadt(...);mPtrThread=&t;}voidstopThread(){mPtrThread->interrupt();}}但它不起作用。我怎样才能停止线程? 最佳答案 如果你想使用interrupt()你应该定义interruptionpoints.线程一旦到达中断点之一,

C++11 std::shared_ptr + boost::序列化

这个问题在这里已经有了答案:Howcanboost::serializationbeusedwithstd::shared_ptrfromC++11?(7个答案)boostserializeandstd::shared_ptr(2个答案)关闭9年前。嗨,有人已经成功地使用boost::serialization序列化了C++11std::shared_ptr。那里有很多过时的帖子,但没有一个具有可接受的解决方案。我不打算讨论为什么我要使用std::shared_ptr只是接受它!我找到了另一个帖子:boostserializeandstd::shared_ptr但它没有回答我如何序列化

c++ - 为什么 Boost.ProgramOptions 不是只有标题?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭5年前。Improvethisquestion有些boost库是只有头文件的,有些不是,出于各种原因等等。Boost.ProgramOptions不是header-only是否有特定原因/设计决定?我想知道,因为它在其文档中声称是一个“小型”库,而且我没有看到任何与系统相关的原因(如线程或asio)。

c++ - Boost.Test 测试静态库

我正在使用Boost.Test进行单元测试。因为一些原因,我想在不同的静态库上编写单元测试用例。问题是当我这样做时,自动注册器不工作。例如,如果我有类似的东西://foo_tests.cpp#defineBOOST_TEST_MODULE"Foo"#includeBOOST_AUTO_TEST_CASE(Bar){BOOST_CHECK(false);}//usedtogeneratelibFooTests.a//main.cpp#defineBOOST_TEST_DYN_LINK#defineBOOST_TEST_MAIN#include//usedtogeneratemain.o然