草庐IT

c++ - 从可变模板构造类

我正在尝试创建一个名为Sink的类,它将创建一个指向您传入的类的指针,这是在RAII中包装一个api。完整版这段代码中,自定义类也是继承自另一个类,有静态资源可以检查这个。指针也被传递给api。但为了简单起见,我删除了它。这是我从cpp.sh得到的错误Infunction'intmain()':43:30:error:nomatchingfunctionforcallto'Sink::Sink(int)'43:30:note:candidateis:10:5:note:Sink::Sink(Args&&...)[withCustomSink=OneArg;Args={}]10:5:no

c++ - 使用 std::async 调用模板函数的正确方法是什么

我正在尝试了解std::async的用途。我在下面编写了模板函数来将所有条目累积到一个整数数组中。template::value>::type>Tparallel_sum(T(&arr)[N],size_tstart=0,size_tend=N-1){if(end-start,arr,start,mid);autores2=parallel_sum(arr,mid+1,end);returnres2+res1.get();}}当我在main中调用上面的函数时,出现以下编译错误(以及更多错误):errorC2672:'std::async':nomatchingoverloadedfun

c++ - 模板 <typename T> 中的 T 可以使用继承吗?

我想做这样的事情:templateaddTri(Tv1,Tv2,Tv3){//Takev1.pos,v2.pos,v3.posandcreateageometricrepn..Triangletri(v1.pos,v2.pos,v3.pos);//allverticeswill//havetohavea.posmember.//Createthevertexbuffer..VertexBuffervb...}因为那行不通,这是我的解决方法..templateaddTri(Tv1,Tv2,Tv3){Vertex*p1=(Vertex*)&v1;//Thisisavery"shutupC+

c++ - 模板中的 "const const T"

以下代码可在G++4.4.0和MSVC2008Express上编译和运行。#includetemplatestructA{protected:Tv;public:constTget()const{returnv;}A(Tv_):v(v_){}};classB:publicA{public:voiddoSomething()const{constint*tmp=get();std::cout(p){}};intmain(intargc,char**argv){inta=134;Bb(&a);constB&c=b;b.doSomething();c.doSomething();return

c++ - 访问模板参数 T 的嵌套类型,即使 T 是指针

基本结构:structFoo{typedefintinner_type;};templatestructBar{typenameT::inner_typex;};主要内容:Bar();//CompilesOKBar();//Doesn'tcompile:templateTbecomesapointer-to-classandisnotavalidclassanymore.如何解决这个问题? 最佳答案 将Bar结构特化为指向T类型的指针://non-specializedtemplateforgenerictypeTtemplates

C++ - 如何为类模板声明函数模板友元

这个问题在这里已经有了答案:Howdowedeclareafriendfunctionwithaclasstemplateinto.hfileanddefinethemintoa.cppfile(notallinoneheaderfile)?(1个回答)关闭7个月前。我有一个类模板,它将输出存储在数组中的对象列表。我收到以下错误,由于错误在.obj和.exe文件中,所以我很困惑错误是在哪里引起的。1unresolvedexternals(proj08.exeline1)unresolvedexternalsymbol"classstd::basic_ostream>&__cdeclop

c++ - 使用模板 <typename T> C++ 时如何初始化数组

通常,如果我有stringarray[10],我可以像这样初始化数组中的所有点:for(inti=0;i或者如果它是一个带有指针的数组,我会写成array[i]=nullptr,但是当类型更通用时我该如何初始化,比如Tarray[10]? 最佳答案 如果值初始化是您所需要的,那么您可以使用空括号对所有数组成员进行值初始化:Tarray[10]{};//^^或者:Tarray[10]={};值初始化为标量生成零值或空值,对聚合的每个成员进行值初始化,并为非聚合类类型调用默认构造函数。(如果您想使用T{}以外的值初始化您的数组元素,那么

C++ 将模板类型限制为数字

我的意思是,我在C++中有一个函数,我想将钱存入一个帐户。这个函数应该能够接受float、double、整数等,因为这些都是输入的有效形式,因为我只需要一个数字来存入。因此,我声明:templatevoidDeposit(typet){...}现在我遇到的唯一问题是:从理论上讲,这个类的用户可能会向这个函数传递一个字符或字符串,并且这样做会产生意想不到的后果。我将如何将类型限制为整数、float、double和短整型?是否可以在函数定义中限制它,以便其他人在使用此函数编程时得到编译器/链接器错误,而不必使用try{...}catch(...){...}? 最

带有箭头符号的 C++ 模板自动返回类型需要 decltype?

C++11为函数中的返回类型引入了箭头符号(不知道名字):templateautofun(T&&a)->decltype(bar(a)){...}但根据scottmeyer的说法,单独使用auto作为返回类型将删除所有const和引用限定符(因为它遵循与模板推导相同的模式),因此惯用的方法是执行decltype(auto)将所有限定符保持在类型之上。但是,在这种情况下,auto是否被推断为decltype(bar(a))?那么decltype(auto)会是decltype(decltype(bar(a)))吗?那会是多余的吗? 最佳答案

c++ - POD 和模板

这是POD吗?templatestructData{floatval_f;Tval_t;intval_i;};如果我有一个C函数需要这样的东西:structData{floatval_f;doubleval_t;intval_i;};我可以传递一个Data吗?对象?附言。我想答案是肯定的,因为在编译时Data将被转换为上面的结构,并且将是一个POD结构。我需要对此进行公正(知情)的确认。 最佳答案 第一个问题的答案,取决于模板参数T.Data如果T将是POD是POD。在回答您的第二个问题时,具有相同定义的类不是相同的类型,因此您不能