草庐IT

TEMPLATE

全部标签

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

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

c++ - 右值引用和 SFINAE

我最近开始使用右值引用,但我遇到了一个案例,我不明白为什么它们会这样工作。我正在尝试确定一个类型是否可以调用begin和end。如果我更改foo以按值或const引用获取它的参数,下面的代码会给出预期的结果,但我不确定为什么在使用右值引用时它不起作用,我想知道是否谁能告诉我为什么。#include#include#includetemplateautobegin(Container&&c)->decltype(c.begin()){returnc.begin();}templateautoend(Container&&c)->decltype(c.end()){returnc.end(

c++ - 在编译时通过模板自动判断类型是否为抽象基类

是否可以在编译时自动判断一个类是否为抽象基类?我有一个对象工厂,通过其他通用代码,它有时会用抽象基类类型实例化。该代码无法编译,因为它在ABC上调用了newT()。在这种情况下,我最终不得不专门为每个ABC创建代码的对象工厂来代替assert(0)。如果可以在编译时自动确定类型是否为ABC,则可以自动进行这种专门化。一个简化的例子如下://thisprogramcodecompilesw/gcc4.4#include#include//Howtoautomaticallyspecializethisclassatcompile-time?templatestructisAbstract

c++ - 满足条件的多种类型的模板类特化

如果我有一个模板类,像这样:templateclassType{/*...*/};在不以任何方式修改Type的情况下,是否有一种简单的方法可以针对所有匹配编译时条件的此类类型专门化它?例如,如果我想为所有整数类型专门化Type,我想做这样的事情(只有有效的事情,即):templateclassType,T>::type>{/*...*/}; 最佳答案 这应该有效:template::value>classType;//doesn'thavetobeaspecialization,althoughIthinkit'smoreclear

c++ - 非指针函数类型可以是非类型参数吗?

我一直在试验C++中的函数类型。请注意,我指的不是像这样的指向函数的指针类型:typedefvoid(*voidFuncPtr)();但更具异国情调的是:typedefvoid(voidFunc)();我没想到下面的代码可以编译,但令人惊讶的是:templateclassfuncClass{public:voidcall(){func();};};voidfunc(){}voidTest(){funcClassfoobar;foobar.call();}但是,如果我尝试将以下内容添加到funcClass:voidFuncPtrget(){return&func;}我收到错误Addres

c++ - 了解 "template argument is invalid"错误消息

考虑代码:#include#includestructtest1{voidInvoke(){};};structtest2{templatevoidInvoke(){};};enumclassInvokableKind{NOT_INVOKABLE,INVOKABLE_FUNCTION,INVOKABLE_FUNCTION_TEMPLATE};templatestructget_invokable_kind{conststaticInvokableKindvalue=InvokableKind::NOT_INVOKABLE;};templatestructget_invokable_ki

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};或

c++ - 在定义处初始化模板结构

我不确定这个主题是否与我正在寻找的完全匹配,但基本上是这样的:我能做到:structsomething{intd;}somethingType;但为什么我不能这样做呢?templatestructsomethingelse{intd;}somethingelseType;如果可以做第二种,正确的做法是什么? 最佳答案 我认为你可以,在语法上,但它被额外的限制所禁止:[温度]/1Atemplatedefinesafamilyofclassesorfunctionsoranaliasforafamilyoftypes.  templat

c++ - 解决 VC++12 中的模板特化错误?

我有一些为Clang3.2编写的代码,我正试图将其移植到VC++12中运行。Clang3.2+和GCC4.8没有问题,但VC++12有问题。这是产生问题的最小片段:templateclassfoo{};templateintReturnsN(){returnN;}templateclassbar{typedeffoo>fooN;};现在我很确定这是一个编译器错误(但如果不是,请告诉我!)给出的错误是:'specialization':cannotconvertfrom'int(__cdecl*)(void)'to'int(__cdecl*)(void)'那么有人知道一个体面的工作吗?编

c++ - 具有嵌套可变参数模板的函数

您能否使用接受任意元组列表的可变参数模板编写一个函数,每个元组具有一组不同的参数?所以你会有类似的东西:templatevoidfunc(...){}func(make_tuple(1,2),make_tuple("hello"));SFINAE助您一臂之力!进一步了解Jeffery的回答,我写了这个小片段。您可以将元组以外的类型放在func的参数列表中的任何位置,它会编译并运行,当它遇到第一个不是模板类的类型时,它只会破坏我的打印链。seq和gens来自here.templateintprint(T&t){coutvoiddumby(T...){}//soothertemplatec