草庐IT

boost-type-erasure

全部标签

c++ - boost::可选抽象类类型

我想要一个抽象类型的可选对象。然而,boost::optional对于抽象类型是失败的:#includeclassA{virtualintgetInt()=0;};classB:publicA{intgetInt(){return666;};};intmain(){boost::optionalmaybeAnA;boost::optionalanother(maybeAnA);};结果error:invalidnew-expressionofabstractclasstype‘A’只使用指针似乎也不是一个可行的解决方案,因为某些函数需要返回一个包含可选值的对象作为成员,尽管期望函数的调

C++ 重载歧义 : conversion versus promotion with primitive types

在这段代码中:voidf(floatf,longinti){cout有一个歧义。Checkitout!.但是,第二个参数是有符号整数。将int绑定(bind)到longint参数需要提升,但对于float,则需要转换。由于第一个参数是关于两个重载的完全匹配,所以它不算数。但是关于第二个参数,它在第一次过载(提升)上的排名优于在第二个(转化)上的排名。为什么会出现解析歧义,而不是选择第一个重载? 最佳答案 int到long是一个转换。short到int是一种提升。(有关积分促销的完整列表,请参阅[conv.prom]。)同理,floa

c++ - 将 boost::log::expressions::attr< std::string > 转换为 std::string

在使用Boost.Log时,我试图保留我的TimeStamp格式化程序,例如:logging::add_file_log(keywords::file_name="my.log",keywords::format=(expr::stream("TimeStamp","%Y-%m-%d%H:%M:%S")("Line")("File")据说我不能使用其他形式的格式化程序,因为我将很难转换"TimeStamp"转换成我的自定义格式:staticvoidmy_formatter(logging::record_viewconst&rec,logging::formatting_ostream

力扣报错runtime error: load of null pointer of type ‘int‘解决思路

记录本算法小白刷力扣的这道题遇到的报错349.两个数组的交集https://leetcode.cn/problems/intersection-of-two-arrays/出现报错的代码 /***Note:Thereturnedarraymustbemalloced,assumecallercallsfree().*/int*intersection(int*nums1,intnums1Size,int*nums2,intnums2Size,int*returnSize){inthash[1000]={0};intresult[1000];//交集是去重的,最多只有1000个数for(inti

c++ - 为什么 std::function 没有 function_type 或等效的成员类型?

来自here在我看来std::function没有function_type或等效的成员类型导出用于初始化它的实际类型。它有result_type,argument_type,以及first_argument_type和second_argument_type,但与上述类型完全不同。为什么它不提供这种类型作为其接口(interface)的一部分?肯定会有一个很好的理由,但我不知道是什么原因,所以我很想知道。因为我知道第一个问题是为什么需要它,好吧,想象一下我想做类似std::is_same::value的事情在sfinae评估中检查它们的基础类型是否相同,只要符号相同,它们包含不同的功

c++ - decltype(some_vector)::size_type 不能用作模板参数

下面的类不编译:template,classAllocator=std::allocator>classMyContainer{public:std::vectordata;std::vector>order;};我收到以下编译器错误:error:type/valuemismatchatargument2intemplateparameterlistfor‘templatestructstd::pair’为什么编译失败,而下面的代码工作正常?template,classAllocator=std::allocator>classMyContainer{public:std::vecto

c++ - 如何将 `boost::static_visitor` 实例传递给函数

我正在使用boost::variant在我的项目中经常出现。我的同事们现在想出了传递特定boost::static_visitor实例的想法。以自定义访问类型。她有一些代码如下:#include#includetypedefboost::variantTVar;structVisitor1:publicboost::static_visitor{templateresult_typeoperator()(constT&){return42;}};structVisitor2:publicboost::static_visitor{templateresult_typeoperator(

c++ - Boost Variant 是否提供与 std 的 holds_alternative 类似的功能?

我在cppreference.com上找到了这段代码。我想知道boost是否为其变体类型提供了类似的功能。我发现boost文档真的很糟糕,找不到任何东西。intmain(){std::variantv="abc";std::cout(v)(v) 最佳答案 虽然不完全一样,但是可以使用基于指针的get函数:boost::variantv="abc";std::cout(&v)!=nullptr)(&v)!=nullptr) 关于c++-BoostVariant是否提供与std的holds_

c++ - Boost::signal 内存访问错误

我正在尝试使用boost::signal来实现回调机制,并且我在boost::signal代码中获得了内存访问断言,即使是对库的最微不足道的使用。我已将其简化为以下代码:#includetypedefboost::signalEvent;intmain(intargc,char*argv[]){Evente;return0;}谢谢!编辑:这是使用带有SP1的VisualStudio2008编译的Boost1.36.0。Boost::filesystem和boost::signal一样也有一个必须链接进去的库,看起来工作正常。我相信我使用的所有其他boost库都只有header。

c++ - 访问boost线程对象的成员变量

我正在使用一个对象来启动boost线程,它有一些我在线程中修改的公共(public)成员变量(在()运算符中)。如何从线程外部访问对象的成员变量?我尝试使用在对象的operator()中和从外部都被锁定的互斥锁(在对象的类中定义),但它似乎不起作用。线程对象代码如下:structMouse{intx,y;stringport;boost::mutexmutex;Mouse(conststring&p):port(p){x=y=0;}Mouse(constMouse&m):mutex(){x=m.x;y=m.y;port=m.port;}voidoperator()(){ifstream