草庐IT

c++ - 初始化模板内部类的静态成员

我对在类模板中初始化静态成员所需的语法有疑问。这是代码(我尽量减少它):templatestructA{templatestructB{staticT1b;};Bb;typedefBBT;Tval(){returnb.b;}};templateTA::BT::b;structD{D():d(0){}intd;};intmain(){Aa;returna.val().d;}使用g++,我得到的错误是:error:toofewtemplate-parameter-lists关于如何初始化b有什么想法吗?请注意,我想保留typedef,因为在我的真实代码中,B比这复杂得多。

c++ - 具有显式模板实例化的未解析外部。什么是声明语法?

这里有一些简化的代码来演示我遇到的问题。我有一个模板函数,我只想为其编译某些固定的实例。函数声明是://***template.h***intsquare(intx);doublesquare(doublex);定义是://***template.cpp***#include"template.h"//(templatedefinitionunusuallyinacoderatherthanheaderfile)templateTsquare(Tx){returnx*x;}//explicitinstantiationstemplateintsquare(intx);templatef

c++ - 关于 c++ 模板函数采用任何类型的问题,只要该类型满足至少一个要求

由于我不能很好地解释这一点,我将立即从一个小例子开始:templatevoidPrint(constT&t){t.print1();}templatevoidPrint(constT&t){t.print2();}这不编译:错误C2995:“voidPrint(constT&)”:函数模板已定义那么,我如何创建一个模板函数,它接受任何类型T,只要该类型有一个print1成员函数或一个print2成员函数(没有多态性)? 最佳答案 一种方法是使用SFINAE检测函数是否存在(Isitpossibletowriteatemplateto

c++ - 如何在模板类中拆分模板友元函数的定义?

下面的例子编译得很好,但我不知道如何在这种特殊情况下分离operator每次我尝试拆分定义时,friend都会造成麻烦,而gcc会提示operator#includetemplateclassTest{public:Test(constT&value):value_(value){}templatefriendSTREAM&operator&rhs){os(5)OperatorTestx;some_other_classy;std::cout此外,使用非成员函数并不等同于拆分定义和声明,因为非成员函数无法访问类的私有(private)属性。 最佳答案

c++ - 带有类模板 typedef 参数的函数模板

以下代码是我在大型项目中尝试做的事情的示例:#include#include//standardtemplatetypedefworkaroundtemplatestructmyvar{typedefstd::vectorType;};templateTmax(typenamemyvar::Type&x)//Tmax(std::vector&x){Ty;y=*x.begin();for(typenamemyvar::Type::iteratorit=x.begin();it!=x.end();++it)if(*it>y)y=*it;returny;}intmain(intargc,ch

C++ 模板和 "no matching function to call"

我遇到了一个奇怪的错误。我有以下签名的功能:templatestaticboolConvertCbYCrYToRGB(constCharacteristicspace,constDATA*input,DATA*output,constintpixels){后来这样称呼:casekByte:returnConvertCbYCrYToRGB(space,(constU8*)input,(U8*)output,pixels);casekWord:returnConvertCbYCrYToRGB(space,(constU16*)input,(U16*)output,pixels);casek

c++ - c++0x 元组是否使用新的可变参数模板或 Boost 的宏元组实现?

我读到它基于Boost的版本,但我不太确定具体到实现时这意味着什么。我知道Boost有自己的可变参数模板,但我认为c++0x会为新元组使用它自己的可变参数模板。 最佳答案 C++0x标准草案中的tuple使用C++0x可变参数模板。它被声明为(§20.4.1):templateclasstuple;但是请注意,TR1语言扩展还包括tuple,它不使用可变参数模板,因为在编写TR1时没有这样的东西。在TR1中,tuple声明为(§6.1):templateclasstuple;其中M是一些实现定义的值,应该至少为10。TR1并不是C+

c++ - 为什么声明/定义必须都在 C++ 模板类的源文件中?

谁能说说原因? 最佳答案 源文件相互独立编译成可执行代码,然后链接到主程序。另一方面,模板函数不能在没有模板参数的情况下进行编译。因此,使用它们的文件需要具有该代码才能被编译。因此,函数需要在头文件中可见。promise的例子:templatevoidswap(T&a,T&b){Ttemp=a;a=b;b=temp;}此处对类T的唯一要求是它具有公共(public)赋值运算符(=)。这几乎是曾经实现或构想的每个类。但是,每个类都以自己的方式实现赋值运算符。不能为swap、swap和swap生成相同的机器代码。这些函数中的每一个都必须

派生类上的 C++ 模板转换

我有3个相互派生的类:classBasic{...}classExtended:publicBasic{...}classFull:publicExtended{...}我有一个模板类,其中包含来自此类的5-5个:templateclassgroup{public:...private:Tone,two,three,four,five;};groupbasicGroup;groupextendedGroup;groupfullGroup;我可以轻松地将fullGroup转换为basicGroup或将extendedGroup转换为basicGroup吗?(我只想向上投)

c++ - 可变参数模板 : Pass parameter pack without expansion

旧的Cstdio工具提供了一种使用vprintf工具传递可变参数集的方法。是否有类似的方式来传递C++0x可变模板参数包而不扩展它?如果您有一个采用可变参数模板参数包的派生类构造函数,并且需要简单地将其传递给基类构造函数,而不是将其解包,这可能会很有用。例如:templateBase::Base(constT&v,constArgs&...args){/*...expandargshere....*/}templateDerived::Derived(constT&v,constArgs&...args):Base(v,args){/*...don'texpandargs...*/}我