草庐IT

c++ - 在 C++ 中重新定义模板 <class T>

我已经搜索并搜索了我的问题的解决方案,但似乎找不到。我正在使用Code::Blocks,但出现了模板类的重定义错误。这是我的“vectorAux.h”文件:#ifndefvectoraux_h#definevectoraux_h#include#include#includetemplatevoidremoveDup(std::vector&v);templateunsignedseqVectSearch(conststd::vector&v,unsignedfirst,unsignedlast,constT&target);templatevoidwriteVector(consts

c++ - error C2783 无法推断模板参数

我被这个错误困住了。我也找到了一个解决方法,但它有点扼杀了锻炼的全部目的。我正在尝试创建一个函数,它将使用两个指向同一个容器的迭代器。我会找到它们之间的元素总和。我为像vector这样的顺序容器创建了通用函数,它工作正常。我为关联容器重载了相同的函数。这是给出错误的地方。mapmyMap;myMap["B"]=1.0;myMap["C"]=2.0;myMap["S"]=3.0;myMap["G"]=4.0;myMap["P"]=5.0;map::const_iteratoriter1=myMap.begin();map::const_iteratoriter2=myMap.end();

c++ - 如何从客户端代码中隐藏模板化的非成员函数?

我有模板函数,比如说,templatevoidmysort(std::vector&vec){size_tb,m,e,...mysort(vec,b,m,e);}templatevoidmysort(std::vector&vec,size_tb,size_tm,size_te){size_tx,y,z;...mysort(vec,x,y,z);}公共(public)接口(interface)是一个只接受vector引用的接口(interface)。我想隐藏另一个,即实现,这样就没有客户端代码可以做mysort(vec,a,b,c);创建一个类,实现函数privatestatic感觉不

c++ - 通用模板非类型参数

我希望我的类接收一个非类型模板参数,但我不想指定非类型参数的类型。我可以这样写:templateclassA{};然后可以按如下方式使用:Aa;这是多余的,因为一旦我知道param=3,那么我就知道Type=int。有没有什么方法可以这样写,以便以下所有行都可以编译和实例化不同的类型?Aa;Ab;Ac; 最佳答案 不,那是不可能的。所有非类型模板参数的类型都必须在参数中定义,并且永远不能从使用中推断出来,即当编译器分析时,您需要Type已知参数Typeparam。 关于c++-通用模板非

c++ - 如何使用 lambda 在 std::function 参数中推导模板类型?

我有一个boost::variant并且我只想在变体是特殊类型时才执行一个仿函数,所以我编写了这个函数:templatevoidif_init(Variant&opt_variant,std::functionfunctor){if(auto*ptr=boost::get(&opt_variant)){functor(*ptr);}}这很好用,但我希望推导出类型T,这样我就可以这样写:if_init(b,[](doublevar){std::cout但是没有推导出类型:type_inference.cpp:19:5:error:nomatchingfunctionforcallto'i

c++ - 具有依赖于早期参数的默认模板参数是否有效?

例如,以下代码片段可在VC++2010中编译:templatestructMatrix{};Matrixm;请注意,Columns的默认参数取决于Rows的参数值。但是C++11(或更早版本)中的这种标准行为是我可以在任何地方依赖的吗? 最佳答案 是的。事实上,这就是大量STL代码的工作原理。std::vector的定义如下:template>classvector这样你就不需要每次都指定allocator了。如果这样是无效的,我们将无法写:std::vectordata;你会把std::map写成:std::map,//map::

c++ - 如何在 OpenCL 中使用模板?

根据thisdocumentpage6(releasedbyAMD)(andthistopics?),有一些方法可以通过OpenCL使用模板。然而,第一份文件报告说这可以通过使用一些似乎不存在的clBuildProgramWithSource选项来完成......无论如何,假设它是clBuildProgram而不是前一个,我尝试将所谓的“-x”选项与“clc++”一起使用,但仍然无法识别:warning:ignoringbuildoption:"-x"事实上,根据Khronos的文档,此选项不可用!该文档可能会以某种方式被弃用,但是还有其他方法可以在OpenCL代码中使用模板吗?

C++11 "late binding"模板参数

请不要误解我的“后期绑定(bind)”,我不是指通常的运行时后期绑定(bind),我指的是别的意思,找不到更好的词来形容它:考虑到我正在为一些需要将这些值与比较器进行比较的值类型V处理容器(或类似的)数据结构Containor,所以我的第一个模板看起来像这样template>structContainor{};现在,我的Containor结构在内部使用了另一个容器。要使用哪个容器也应该可以通过模板参数进行配置,假设默认值为std::set。所以我的下一个版本的Containor看起来像这样:template,typenameCont=std::set>structContainor{}

c++ - 模板化放置新的和析构函数

为什么不能编译?templateclassPool{charBuff[sizeof(T)*256];public:Pool(){T*item=reinterpret_cast(&Buff[0]);for(inti=0;i(&Buff[0]);for(inti=0;i~T();}voidreset(unsignedinti){T*item=reinterpret_cast(&Buff[0]);item[i]->~T();item[i]->T();}}我显然想要实现的是在原始内存数组上调用placementnew(应该调用构造函数ok)。然后我想调用数组中项目的析构函数和构造函数。问题是I

c++ - 依赖于模板参数的成员变量和构造函数

在C++11中,我希望在类中有一个成员变量,并且只有在选择默认模板值时才需要一个用于初始化的构造函数(当然,仅适用于支持的类型,如int)。实现此目标的推荐方法是什么(允许提升)?类似于:templatestructC{C(){}//onlyavailableif_x!=-1C(intx):x(x){}//onlyavailableif_x==-1//moremethodsthatarecommonforall_xandreferto_x/xprivate:intx;//onlyavailableif_x==-1//moremembersthatarecommonforall_x};或