草庐IT

调用模板化内部类静态成员函数的 C++ 语法?

我有一些模板代码可以在VC9(MicrosoftVisualC++2008)中正常编译,但不能在GCC4.2(在Mac上)中编译。我想知道我是否缺少一些语法魔法。下面我有一个精简的例子来证明我的错误。抱歉,如果这个示例看起来毫无意义,我已尽可能删除以隔离此错误。特别是我有一个模板类S,它有一个内部类R,它也是一个模板类。从顶级模板函数foo,我试图调用R::append,它是R的静态成员函数:templatestructS{templateS&append(constT&){return*this;}templatestructR{templatestaticS&append(S&s,

c++ - 此错误会导致什么 C++ 模板问题?

在Botanv1.8.8上运行gccv3.4.6在成功构建Botan并运行其自检后构建我的应用程序时出现以下编译时错误:../../src/Botan-1.8.8/build/include/botan/secmem.h:Inmemberfunction`Botan::MemoryVector&Botan::MemoryVector::operator=(constBotan::MemoryRegion&)':../../src/Botan-1.8.8/build/include/botan/secmem.h:310:error:missingtemplateargumentsbefo

c++ - 模板参数的引用变量的问题

下面的小例子说明了我的问题:templatestructX{staticvoidxxx(T&x){}staticvoidxxx(T&&x){}};intmain(intargc,char**argv){intx=9;X::xxx(x);//OK.X::xxx(x);//ERROR!return0;}错误信息(海湾合作委员会):error:‘staticvoidX::xxx(T&&)[withT=int&]’cannotbeoverloadederror:with‘staticvoidX::xxx(T&)[withT=int&]’为什么?T=int&--->staticvoidxxx(T

c++ - 继承、模板和虚函数(这可能会变得困惑)

我只是在寻找模板的方法,所以尝试了一些东西。让我知道我在这里做错了什么。我正在尝试重载继承的模板虚拟方法。//classtemplates#includeusingnamespacestd;templateclassmypair{Ta,b;public:mypair(Tfirst,Tsecond){a=first;b=second;}virtualAgetmax();};templateAmypair::getmax(){Aretval;retval=a>b?a:b;returnretval;}templateclassnext:publicmypair{Agetmax(){coutm

c++ - dynamic_cast<> 将变量参数传递给模板

我有一个执行测试用例的C++应用程序。某些测试用例可能会依赖于其他测试用例的输出。所有测试用例都实现一个基本接口(interface):///baseclassforalltestcasesclassITest{public:virtualvoidExecute()=0;};产生一些可能对其他测试用例有用的对象的测试用例实现这个接口(interface):///implementedbytestcasesthatprovidedatatoothertestcasestemplateclassIDependency{public:virtualObjGet()=0;};需要来自其他测试用

c++ - 如何在 STL 模板中使用导出类 (__declspec(dllexport))?

我正在使用导出类class__declspec(dllexport)myclass{private:template__declspec(dllexport)classstd::map;std::mapm_map;//something};当我这样做时,我收到警告C4251说m_map:class'std::map'needstohavedll-interfacetobeusedbyclientsofclassmyclass.关于如何解决这个问题的任何想法?阿图尔 最佳答案 您不应该在使用您的DLL的代码将使用的头文件中使用__de

【 C++私房菜】模板的入门与进阶

目录一、模板的定义a.函数模板的调用b.类模板的定义2、模板的重载3、非类型模板参数和模板类型参数4、模板的编译二、模板的特化1、函数模板特化2、类模板特化a.全特化b.偏特化三、模板相关定义一、模板的定义a.函数模板的调用理在的C+编译器实现了C++新增的一项特性——函数模板(functiontemplate)。函数模板是通用的函数描述,也就是说,它们使用泛型来定义函数,其中的泛型可用具体的类型(如int、double)替换。通过将类型作为参数传递给模板。可使编译器生成该类型的函数。由于模板允许以泛型(而不是具体类型)的方式编写程序。因此有时也被称为通用编程,由于类型是用参数表示的,因此模板

C++ 模板 : no matching function for call

考虑以下代码templateTexponentiel(Tval,unsignedn){Tresult=one;unsignedi;for(i=0;i(2.0f,3);cout编译器告诉我这个没有匹配函数来调用'exponentiel(float,int)'为什么?奇怪的是exponentiel与int一起使用。 最佳答案 问题出在模板参数列表中的Tone和1.0上。您不能拥有浮点类型的非类型模板参数,也不能将浮点值作为模板参数传递。这是不允许的(据我所知,没有充分的理由不允许这样做)。g++在这里的错误信息是相当无用的。Visual

C++模板特化方法定义

下面的代码工作正常,一个简单的模板类,有定义和使用#include#includeusingnamespacestd;templateclassfoo{public:stringwhat();};templatestringfoo::what(){return"foooftypeT";}intmain(){foof;cout如果我然后添加以下内容(在main之上,但在模板类foo声明之后;)templateclassfoo{public:stringwhat();};templatestringfoo::what(){return"foooftypechar";}我从g++得到一个错误

c++ - 针对非类型参数特定值的模板代码优化。

templateclassfoo{public:intbar(){if(flag){//stuff}}};编译器在编译这个类时,会用true或false替换flag参数。然后我们有if(true)(或if(false))。然后,if子句检查常量表达式并将在编译时删除。我可以期望编译器有这样的行为吗? 最佳答案 不,你不能。任何优化完全取决于编译器。由于您使用的是模板,因此您应该为flag的两种情况编写专门化。 关于c++-针对非类型参数特定值的模板代码优化。,我们在StackOverfl