草庐IT

c++ - 未使用的模板方法中的错误

structB{inta;voidfoo(){a=5;}};templatestructA{A(inti){B::foo();}A(doubled){}};intmain(){Aa(5.0);}gcc4.7.2编译它没有错误。clang3.4svn提示:$clang-Wall-Wextratest.cpptest.cpp:10:16:error:calltonon-staticmemberfunctionwithoutanobjectargumentA(inti){B::foo();}~~~^~~代码当然是错误的,但是哪个编译器是符合标准的呢?同样奇怪的是,如果您使用5而不是5.0,c

c++ - Cryptic template 模板参数错误

我正在尝试创建一个从std::map或std::unordered_map获取键的函数。我可以使用简单的重载,但首先我想知道这段代码有什么问题。templateclassTContainer>std::vectorgetKeys(constTContainer&mMap){std::vectorresult;for(constauto&itr(std::begin(mMap));itr!=std::end(mMap);++itr)result.push_back(itr->first);returnresult;}当使用std::unordered_map调用它时,甚至手动指定所有模板

c++ - 类模板中的静态成员变量

当您有一个包含静态成员的(非模板化)类时,例如:classFoo{public:staticintx;};然后Foo::x必须在一个且只有一个翻译单元中定义,否则编译器会提示多个定义。所以在somefile.cpp你必须定义它:intFoo::x=10;这样,任何访问Foo::x的翻译单元正在访问相同的内存地址。但是如果Foo怎么办?是类模板吗?templateclassFoo{public:staticintx;};现在,Foo::x可以在头文件中定义:templateintFoo::x=10;所以,如果类模板Foo在foo.hpp中定义,和translation_unit1.cpp

C++:如何在模板类中部分特化模板函数

代码说话:templatestructVector3D{Groupx,y,z;Vector3D(Groupx,Groupy,Groupz):x(x),y(y),z(z){}templateGroupNorm()const;};templatetemplateGroupVector3D::Norm()const{returnpow(pow(x,p)+pow(y,p)+pow(z,p),(1.0/p));}/*templatetemplateGroupVector3D::Norm()const{returnsqrt(x*x+y*y+z*z);}*/注释block在vc11(vs2012)中

c++ - 子类坚持调用模板而不是构造函数

以下不使用g++4.4.7编译,在命令行上传递--std==c++0x:#include#includetemplateclassA{public:Tv;A(){std::coutexplicitA(constV&i):v(i){}#endif};classB:publicA{public:B(){std::cout(i){std::cout(std::move(i)){std::cout(static_cast&>(i)){std::cout(std::move(static_cast&&>(i))){std::cout产生以下错误,复制和移动构造函数似乎调用显式A模板而不是A的明显

c++ - 模板类 - 成员函数特化

示例代码:templateclassA{public:A(Tt):x(t){}TgetX();private:Tx;};templateTA::getX(){returnx;}//memberfunctionspecializationtemplate//workswithandwithouttemplatelongA::getX(){return1000L;}在成员函数专门化之前,以上代码在使用和不使用模板的情况下都有效。为什么?在这种情况下有什么区别?编辑1:我以这种方式使用该模板(VS2012编译器):Aa1(1);couta2(1);cout 最佳答

c++ - OpenCV 中具有公差的模板匹配

我正在使用OpenCV和C++。我想检查一个图像是否是另一个图像的一部分,并且已经找到了一个名为matchTemplate的函数,该函数正在运行。但是如果模板图像有点不同怎么办?是否有像matchTemplate这样的函数或方法来检查模板是否是源图像的一部分,但具有诸如position、angle之类的公差参数、尺寸甚至变形?还是我需要一种与模板匹配完全不同的方法?到目前为止,这是我的代码,它在源图像中找到模板图像,但没有(或几乎没有)容差。#include#include#include#include#include#includeusingnamespacecv;usingnam

c++ - 通用模板化枚举空值

clang++提示变量未初始化:templatevoidfunc(){TEnumenumVar;//...if(something())enumVar=someValue();//...if(something())doSomethingWith(enumVar);//通常,为了避免这个警告,枚举可以有一个Unknown=-1值或类似的东西-但不幸的是,在这里枚举类型被用户传递为typenameTEnum,所以我不知道它是否包含“空值”。有什么办法可以解决这个问题吗?还是我应该忽略/禁止显示警告? 最佳答案 总是初始化,例如使用三元

c++ - 使模板化优化更易于维护

有时,通过使用不变量的模板化内部实现,编译器可以更好地优化一段代码。例如,如果您在图像中有已知数量的channel,而不是像这样做:Image::doOperation(){for(unsignedinti=0;i你可以这样做:templateImage::doOperationInternal(){for(unsignedinti=0;i();break;case2:doOperation();break;case3:doOperation();break;case4:doOperation();break;}}这允许编译器为不同的channel数生成不同的展开循环(这反过来可以极大

c++ - 组合策略类 - 模板模板参数和可变参数模板

我想知道是否可以使用可变模板-模板参数组合策略类,以便每个策略都可以有自己的模板包。似乎您只能在所有策略中共享一个模板包,但我希望情况并非如此。以下似乎是可能的:templateclassPolicy1,templateclassPolicy2,templateclassPolicy3,typename...Args>structPolicyClass:publicPolicy1,publicPolicy2,publicPolicy3{}我希望每个政策都有自己的包,这样我就可以做这样的事情(?):templatestructimplementedPolicy1{};templatest