草庐IT

TypeName

全部标签

c++ - 模板模板参数的显式匹配

考虑这个函数:templateclassC,classT,classAlloc>voidfoo(C&container){std::cout函数foo()接受std::vector,但它也接受std::map在C++17中因为Compare和Allocator有默认值。备注std::map在C++14中失败。我怎样才能制作foo()只接受只有2个模板参数的模板,所以失败并显示std::map在C++17中? 最佳答案 HowcanImakefooonlyaccepttemplateswithexactlyonly2templatep

c++ - 为什么参数推导在这个模板模板参数中不起作用

我有以下模板函数,它的参数是模板模板参数。templateclassCONTAINER=std::vector>voidmerge(typenameCONTAINER::iteratorit){std::cout下面的代码使用了这段代码。std::vectorvector1{1,2,3};merge(begin(vector1));它按预期工作,但是当我使用merge(begin(vector1));它无法推断出T的类型.我认为它可以从std::vector::iteratorit;推导出类型作为int.为什么编译器无法推断类型? 最佳答案

c++ - 使用可转换类型调用重载函数时模板构造函数歧义

我有2个类,它们都具有单参数模板化构造函数。一个是整数类型的全部,而在另一个类中,它用于绑定(bind)任何可迭代对象。我有两个针对特定函数的重载,这些函数将使用这些类型中的每一种。如果我使用整数类型或字符串或至少适用于一个类的东西调用该函数,我会收到有关调用歧义的错误。#includeclassA{public:templateA(Iterableit):s(it.begin(),it.end()){}private:std::strings;};classB{public:templateB(Integeri):i(i+1){}private:inti;};voidUse(Aa){

c++ - 静态多维数组,编译时维度定义

是否有任何语法可以在编译时定义静态数组的维数?假设我有一个大小为D的元组,其值为d_0,...,d_{D-1}。我希望能够创建一个数组Tarr[d_0][d_1]...[d_{D-1}]。有没有办法在编译时实现这一点?我特别询问静态数组语法,而不是如何嵌套结构。这里有一个代码片段来阐明我想要实现的目标:templatetypenameContainer,autoDimC,auto...Dim>structNestedContainer{usingtype=Container::type,DimC>;};templatetypenameContainer,autoDim>structNe

c++ - 如何在模板化基类中命名嵌套模板?

在下面的设置中,我该怎么做才能引用名称Bar在派生类内部Derived?templatestructFoo{templatestructBar{};};templatestructDerived:Foo{//whatgoeshere?Barx;//Error:'Bar'doesnotnameatype};我试过了usingFoo::Bar;,但这无济于事。有没有什么using可以使派生类知道嵌套基模板名称的声明,这样我就可以保留简单的声明Barx?我知道我可以说typenameFoo::templateBarx;,但我有很多这样的情况,我不想用如此冗长的代码不必要地增加代码负担。我也有

c++ - 创建类的可变包装器

我有模板类ReadertemplateclassReader{typedefTtype;};特殊实现(派生类)具有带签名的方法Tread(IStream&,任意数量的参数,可能为零)即类IntegerReader公共(public)函数:templateclassIntegerReader:publicReader{public:Tread(IStream&stream);Tread(IStream&stream,Tmin,Tmax);Tread(IStream&stream,Tmin,Tmax,std::stringname);}现在我想创建一个包装器,它允许我创建另一个阅读器,并调

c++ - 简化的元组实现

我正在一个没有任何标准库的平台上工作,而且我正在尝试实现“类元组”类型。我只需要按类型获取的工具,但我希望编译器能够如果类型不存在,则发出static_assert。无需断言在重复的类型上,但这会很好......这是我尝试过的:templatestructSimpleTuple;templatestructSimpleTuple{SimpleTuple(){}};templatestructSimpleTuple{typedefHeadHeadType;typedefSimpleTupleVATailType;SimpleTuple(Headhead,Tail...tail):data

c++ - c++ Boost循环遍历模型的维度::点

我想知道是否有一种方法可以遍历boost点模型的维度。我正在尝试创建一个函数来对两个自定义点进行计算,具有可定义的维数。换句话说,每个点的维数将匹配,但它们不会是一个常量值。我想在每个维度上做相同的操作,所以我需要做一个循环来实现这一点。我想要做的事情的一个例子是:for(std::size_tdim=0;dim();//dostufftodset(d);}我知道这行不通,因为d不是编译时常量。谢谢! 最佳答案 作为替代方法,我认为您应该能够将BoostGeometry点模型调整为Fusion序列。LiveOnColiru#incl

c++ - std::transform 的泛化

考虑一下我为N个输入迭代器编写的std::transform的这个简单概括:#include#include#includetemplateOutputIteratortransform(InputIteratorfirst,InputIteratorlast,OutputIteratorresult,NaryOperatorop,InputIterators...iterators){while(first!=last){*result=op(*first,*iterators++...);++result;++first;}returnresult;}intmain(){const

c++ - 在 C++ 中推导模板返回类型

目前,我尝试编写一个函数retrieveKeys(),它给我std::map的键并将其存储在一些std::container中。该函数应在两种方面具有通用性:接受std::map和std::unordered_map作为参数类型。返回用户定义容器中的key,例如。G。std::vector或std::deque(容器必须支持push_back()方法)。目前该函数的使用方式如下:std::unordered_maptestMap;std::maptestMap2;std::vectorkeys1=retrieveKeys(testMap);std::dequekeys2=retriev