草庐IT

TEMPLATE

全部标签

c++ - 如何创建模板依赖成员类型

我正在尝试减少和简化一些可怕的嵌套和过度专门化的模板化C++代码。为此,我希望能够声明依赖于实例化函数或类的模板类型的成员类型。采用以下通用类模板生成的模板特化。“a”的类型取决于实例化类型。templateclassA;templateclassA{doublea;}};templateclassA{floata;}};templateclassA{floata;}};除了'a'的类型,模板类型到double->double、float->float和short->float类型的映射之外,这些类是相同的。有没有一种方法可以简单地封装这个映射,只允许编写一次类?我想我想写如下内容,但

c++ - "typename"和 "template"关键字 : are they really necessary?

编译c++模板代码时,这个站点上有很多问题。此类问题最常见的解决方案之一是在程序代码的正确位置添加typename(以及不太常见的template)关键字:templateclassBase{public:typedefcharSomeType;templatevoidSomeMethod(SomeType&v){//...}};templateclassDerived:publicBase{public:voidMethod(){typenameBase::SomeTypex;//^^^^^^^^this->templateSomeMethod(x);//^^^^^^^^}};是否有

c++ - 使用 C++ 模板魔法进行通用和存在量化

有没有办法实现universal和existential使用C++模板魔术进行量化(可能使用SFINAE等)?像这样:templateclassPredicate>structUniversalQuantification{staticconstboolvalue=/*foranyArgumentPredicate::value==true?true:false*/;};templateclassPredicate>structExistentialQuantification{staticconstboolvalue=/*forsomeArgumentPredicate::value

c++ - 派生自模板基类的模板构造函数

只是好奇,是否有可能从模板类继承并在派生类的构造函数中调用基类的构造函数,该基类也是模板化的并且没有参数可从中推断其类型?templatestructBase{templateBase(){//noargumentoftypeDtoinferfromstatic_assert(std::is_same::value,"");}};structDerived:Base{Derived():Base::Base(){}//isthereawaytowriteitcorrectly?};在我的特定情况下,我可以用模板方法替换模板构造函数,但这仍然是一个关于语言灵active的有趣问题。

c++ - 类模板的嵌套类可以是 "incomplete"

我不知道如何解释为什么创建成员有效inner在类模板中OuterTempl而在未模板类中这样做是非法的Outer.//Non-templateversionstructOuter{structInner;Innerinner;//incompletetype(Igetthis)};structOuter::Inner{};//TemplateversiontemplatestructOuterTempl{structInnerTempl;InnerTemplinner;//OK...Huh!?};templatestructOuterTempl::InnerTempl{};intmai

c++ - 具有默认模板参数的模板结构未实例化

假设我有这段代码templatestructX{staticdoublef;};templatedoubleX::f=14.0;如果我尝试编译clang会出现以下错误nestednamespecifier'X::'fordeclarationdoesnotreferintoaclass,classtemplateorclasstemplatepartialspecialization对于海湾合作委员会:error:templatedefinitionofnon-template'doubleX::f'问题是:为什么编译器要我们像这样专门化结构X:templatestructX{stat

c++ - 限制模板函数,只允许某些类型

这里说我有一个原则上可以接受所有类型的简单模板函数:templatestd::ostream&operator我只想用这个模板来计算一些类型,比如std::vector和boost::array对象。但是,每当我将cout用于其他类型甚至是基本类型时,例如std::cout请问,是否可以限制我的模板功能,使其只接受我指定的几种类型?这就是当我使用cout更清楚地说,这就是我想要做的:templatestd::ostream&operator 最佳答案 为此编写一个真正通用的解决方案很困难。根据std::vector或std::arr

c++ - 在两个不同的命名函数之间进行选择的特征有什么替代方法?

而且...我不想使用函数指针,我真的想直接使用函数本身(因此它可以内联或应用其他优化)。假设:我有一个模板函数/类,它将计算一些数学内容,模板参数是整数类型,可能是unsignedint32_t或者可能是无符号int64_t。在某些时候我需要随机数,所以我需要一个生成器,在一种情况下我将使用mt19937而在另一种情况下我将使用mt19937_64。所以实际的类型名称是不同的,但我必须选择一个并将其实际写入源代码。显然,整数类型的特征类可以正常工作(这就是我现在正在做的)。但在我看来,这种一次性使用在语法方面相当重量级,而且有点非本地(w.r.t.如果你明白我的意思,请阅读源代码)。另

c++ - 带有模板化参数的偏特化函数模板

我有一个模板函数(为了简单起见,我们称它为“add”)templateinlineTadd(constTa,constTb){returna+b;}我可以针对某些类型专门化它,但我想做的是针对模板化类型专门化它。在我的例子中,我的模板类型叫做Vec2.它是一个二维三角vector(如x和y,而不是c++vector!)我想做的是专门化我的addVec2一般情况下的函数,而不是必须专门针对Vec2的每种类型可以一起使用。Vec2的图书馆来自V2d的类型定义(双),V2f(float)和V2i(整数)。我可以专门针对其中的每一个使用类似的东西:templateinlineV2fadd(co

c++ - 如何调用模板类的模板构造函数?

templatestructA{templateA(){}templatestaticvoidf(){}};intmain(){A::f();//okautoa=A();//errorC2062:type'double'unexpected}问题在代码中是不言而喻的。我的问题是:如何调用模板类的模板构造函数? 最佳答案 您不能直接调用类的构造函数。如果您无法从调用中推断出构造函数的模板参数,则无法调用该特定构造函数。您可以做的是创建某种可用于零开销扣除的类型包装器:templatestructtype_wrapper{};templ