草庐IT

Duck-typing

全部标签

C++, Linux : error: conversion from ‘boost::unique_future<void>’ to non-scalar type ‘boost::shared_future<void>’ requested. 如何绕过它?

我尝试使用boostthreadfutures.所以如图here我们可以得到sharedfuture来自packagedtask.所以我在linux上尝试这样的功能:templatevoidpool_item(boost::shared_ptr>pt){boost::shared_futurefi=pt->get_future();//error//...但调用它时出错:../../src/cf-util/thread_pool.h:Inmemberfunction‘voidthread_pool::pool_item(boost::shared_ptr>)[withtask_retu

C++11 : How can I define a function that accept a universal reference of a specific type of object?

问题:我正在用C++11开发一个程序。我想编写一个接受右值引用和左值引用的函数。(即通用引用)。以下函数接受通用引用参数:templatevoidfunction(T&&t){/*SNIP*/}但是,它接受所有类型的参数。它破坏了函数的类型安全。想让它接受特定类型的参数怎么办?这是我能想到的解决方案:voidfunction(Class&t){/*SNIP*/}voidfunction(Class&&t){function(t);}然而,它很丑陋。如果我想更改要接受的参数或更改函数名称,我必须更新函数的两个版本。有比这更好的等价物吗?编辑:问题已解决。你们都回答得很好。我对两个答案都投

C++ 错误 : "Expression must have integral or enum type"

这个问题在这里已经有了答案:Whycan'ttheswitchstatementbeappliedtostrings?(22个答案)关闭8年前。我在下面的(不完整的)函数的switch语句中收到错误“表达式必须具有整数或枚举类型”。我盯着它看了一会儿,想不通这是怎么回事。非常感谢任何见解。std::stringCWDriver::eval_input(std::stringexpr){std::vectorparams(split_string(expr,""));std::stringoutput("");if(params.size()==0){output="Inputcanno

c++ - has_type 模板为 struct type {} 返回 true;

有很多方法可以实现has_type推导ifT的模板有一个名为type的嵌套类或typedef.即namespacedetail{templatestructtovoid{typedefvoidtype;};}templatestructhas_type:std::false_type{};//thisonewillonlybeselectedifC::typeisvalidtemplatestructhas_type::type>:std::true_type{};或者templatechartest_for_type(...){return'0';}templatedoubletes

c++ - 如何表达 "the minimum integral type larger than T"?

假设我有一个整数类型T(有符号或无符号)。我想(在编译时)引用可以容纳的最小整数类型(有符号或无符号),比如说std::numeric_limits::max()加1(在非溢出意义上,我的意思是)。这样做的通用方法是什么? 最佳答案 对于无符号类型,这可以解决问题:templateconstexprunsignedsize_in_bits(){returnsizeof(T)*CHAR_BIT;}templateusingleast_larger_uint_t=typenameboost::uint_t()+1>::least;如果我

c++ - 警告 C4673 : throwing 'ex::traced_error<EX>' the following types will not be considered at the catch site

MSVC10和MSVC9在编译我的异常框架时都生成了4级警告消息,尽管程序的行为似乎是正确的。异常框架相当庞大和复杂,但我已经设法将其归结为它的本质。这是一个完整的程序,您可以在VS10中编译和运行#include#include#include#include#includeusingnamespacestd;namespaceex{classgeneric_error:virtualpublicstd::exception{public:generic_error(intthread_id):thread_id_(thread_id){}constchar*what()constt

c++ - 在具有模板构造函数 : weird incomplete type issue 的类中使用智能指针的 Pimpl

当使用带有pImpl习惯用法的智能指针时,如structFoo{private:structImpl;boost::scoped_ptrpImpl;};明显的问题是Foo::Impl在生成Foo的析构函数时不完整。编译器通常会在那里发出警告,而Boost智能指针内部使用的boost::checked_delete静态断言类Foo::Impl已完成如果不是这种情况,则触发错误。要编译上面的例子,必须这样写structFoo{~Foo();private:structImpl;boost::scoped_ptrpImpl;};并在实现文件中实现一个空的Foo::~Foo,其中Foo::Im

C++ 错误 : Conversion to Non-Scalar Type

这个问题不太可能帮助任何future的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visitthehelpcenter.关闭10年前。我似乎在下面的代码段中遇到了一个特殊的错误(忽略多余的头文件和空白的主函数,我只是想将这个问题隔离到一个可编译的.cpp文件中以便在这里发布)。它说从“[我定义的某些类型]”到非标量类型“[我定义的某些类型]”的错误转换。这个特定示例中的代码应该将一组字符串列表作为一个输入参数(命名输入),并将对字符串列表的引用作为另一个(命名输出)并计算最长的公共(p

c++ - 在 C++14 中使用自动返回 'type' 进行显式模板特化是否有效?

Previousquestion.我重复上一个问题的代码,使这个问题独立。如果使用gcc4.8.3编译下面的代码,则它不会发出任何警告。使用-std=c++1y。但是,如果使用-std=c++0x标志编译,它会发出警告。在上一个问题的上下文中,声明代码不使用gcc4.9.0编译。不幸的是,目前我还没有完全理解auto是如何实现的。因此,如果有人能回答以下问题,我将不胜感激:1).以下代码是否符合C++14标准的有效C++?2).如果是的话,这段代码会被认为是一种好的风格吗?如果不是,为什么不呢?3).为什么下面的代码在使用C++11编译器时(有时)可以编译和工作?或者,为什么它并不总是

c++ std::types 而不是相应的 c 类型

例如,考虑header。C++标准says:TheheaderdefinesalltypesandmacrosthesameastheCstandardlibraryheader.那么有没有必要用saystd::int8_t而不是短C形式int8_t在什么地方? 最佳答案 Soisthereaneedtousesaystd::int8_tinsteadoftheshortCformint8_tsomewhere?是的。每[headers]/4C名称是否在全局namespace中定义是未指定的。因此你需要std::int8_t使用in