草庐IT

generate_tuple_type

全部标签

c++ - xvalues : differences between non class types and class types

考虑下面的最小示例:#includestructS{};intmain(){Ss;std::move(s)=S{};}它编译没有错误。如果我改为使用非类类型,则会收到错误。例如,以下代码无法编译:#includeintmain(){inti;std::move(i)=42;}枚举、作用域枚举等也是如此。错误(来自GCC)是:usingxvalue(rvaluereference)aslvalue这背后的原理是什么?我想这是对的,但我想了解我可以对除非类之外的所有类型执行此操作的原因是什么。 最佳答案 C++允许对类对象右值进行赋值,

c++ - 使用 std::function 时如何解决此 <unresolved overloaded function type> 错误?

在以下(有效的)代码示例中,模板化的register_enum()函数用于迭代枚举并调用用户提供的回调以将枚举值转换为C字符串。所有枚举都在一个类中定义,枚举到字符串的转换是使用静态to_cstring(enum)函数完成的。当一个类(如下面的着色器类)有多个枚举和相应的重载to_cstring(enum)函数时,编译器无法决定将哪个是正确的to_cstring()函数传递给register_enum()。我认为代码比我能解释得更好...#include#include//ActualcodeusesLua,butforsimplification//I'llhideitinthise

c++ - 使用 make_tuple 进行比较

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Implementingcomparisionoperatorsvia'tuple'and'tie',agoodidea?有时候我需要写一些丑陋的仿函数例如lhs.date_这让我很生气。所以我开始避免这样写:std::make_tuple(lhs.date_,lhs.time_,lhs.id_)我几乎很高兴,但请注意,我可能不是出于他们的目的使用元组让我担心。您能批评一下这个解决方案吗?或者这是一个很好的做法?您如何避免这种比较?更新:感谢您指出std::tie以避免复制对象。并感谢您指出重复的问题

c++ - llvm::Type 结构的字符串表示

llvm::Type2.9及更早版本曾经使用getDescription方法来检索类型的字符串表示形式。llvm3.0中不再存在此方法。我不确定这是否被弃用以支持Type::print(raw_ostream&),但无论如何我对这个API很好奇。关于如何使用它有哪些例子?如何转储到string或constchar*?特别是,我想将字符串传递给Boost::Format,这是一个现代C++sprintf。 最佳答案 我想,您需要创建一个llvm::raw_string_ostream实例并将您的std::string传递给它的构造函数

c++ - std::common_type 实现

为了了解它是如何工作的,我查看了标题type_traits中std::common_type的libstdc++实现。我不得不承认我并不真正理解它是如何工作的。在这里:///common_typetemplatestructcommon_type;templatestructcommon_type{typedef_Tptype;};templatestructcommon_type{typedefdecltype(true?declval():declval())type;};templatestructcommon_type{typedeftypenamecommon_type::t

c++ - 为什么 std::make_tuple 将 std::reference_wrapper<X> 参数转换为 X&?

在C++11标准中它声明(参见cppreference.com,另请参见标准的第20.4.2.4节)它声明templatetuplemake_tuple(Types&&...args);Createsatupleobject,deducingthetargettypefromthetypesofarguments.ForeachTiinTypes...,thecorrespondingtypeViinVtypes...isstd::decay::typeunlessapplicationofstd::decayresultsinstd::reference_wrapperforsome

c++ - 错误 : no type named 'vector' in namespace 'std'

为什么会这样?error:notypenamed'vector'innamespace'std';didyoumean'hecto'?voidaskForVector(std::vector*vector);#include#includevoidaskForVector(std::vector*vector);intmain(){std::vectorvector;intsize;askForVector(&vector);std::cout>size;vector->resize(size);for(inti=0;i>vector[i];}for(intj:*vector)std:

c++ - 为什么 std::tuple<int> 不能简单复制?

内置thisonlinecompiler,以下代码:#include#include#includeintmain(){std::cout>::value>::value>::value>::value输出:0000我在VisualStudio2015中得到了相同的结果。为什么会这样?POD类型的std::tuple,更不用说简单的std::pair,是否有正当理由不能被简单复制?我假设它们的实现提供了一些自定义赋值运算符,但它们与编译器生成的默认版本有何不同? 最佳答案 就琐碎的可复制性而言,对失败的原因是标准不要求复制/移动赋值

c++ - <type_traits> 的 is_function_pointer<>

中有这些:is_pointeris_functionis_member_function_pointer但不是这个:is_function_pointer为什么会这样? 最佳答案 [meta.unary.cat]中的特征旨在将每种类型归为一个类别。是void、integral、pointer等等。在这个层面上,pointer-to-function和pointer-to-int没有区别。并注意指向成员的指针不是指针。只不过是英文的谐音而已。它的目的是每个类型都返回true到[meta.unary.cat]中的一个特征。在这种分类中,

c++ - "Template argument for template template parameter must be a class template or type alias template"

templatestructList{};templateclass>structListHelper;templatestructListHelper>{};^/*Error:Templateargumentfortemplatetemplateparametermustbeaclasstemplateortypealiastemplate*/怎么了?我正在使用clang++SVN。 最佳答案 您有一个模板模板参数。您必须传递一个模板作为其参数。您改为将模板实例化作为其参数传递-这是一个具体类,而不是模板(其所有参数均已绑定(bi