草庐IT

Templates

全部标签

C++ Vector Template Per-Component 操作

我正在重写项目的vector数学部分,我想根据vector的类型和维数来概括vector。vector表示类型为T的N维vector。templatestructvector{Tdata[N];};我需要重写许多数学函数,其中大部分将在每个组件的基础上运行。加法运算符的直接实现如下所示。templatevectoroperator+(vectorlhs,vectorrhs){vectorresult;for(inti=0;i我的问题:有没有办法(通过模板技巧?)在不使用for的情况下实现它循环和一个临时变量?我知道编译器很可能会展开循环并将其优化掉。我只是不喜欢以这种方式实现所有对性能

c++ - 指向多次实例化的函数模板的指针

我有一个与函数模板相关的简单问题。假设我有一个header,其中包含一个带有名为f的模板方法的类:classtest{public:templatevoidf(Tt){}};如果此header包含在多个.cpp文件中,并且这些.cpp中的每一个都使用相同的类型(假设为int)调用f,我可以在其他地方获取函数的指针吗代码?考虑到可能有多个定义,链接器会只保留一个吗? 最佳答案 Ifthisheaderisincludedinseveral.cppfiles,andeachofthese.cppcallsfwiththesametype

c++ - 编译时是否需要短路评估规则?

程序A产生编译错误(正如预期的那样),因为isFinite是用非整数类型调用的。程序A#includeclassFoo{};templateboolisFinite(constT&t){static_assert(std::is_integral::value,"CalledisFinitewithanon-integraltype");returnfalse;}intmain(){Foof;std::cout然而,稍作修改(参见程序B)允许程序编译(VisualStudio2013)并产生以下输出。程序BVisualStudio2013输出Foo是有限的?是的计划B#includec

c++ - 将数字隐式转换为整型常量

假设我有这个功能:templatevoidfoo(std::integral_constant);现在要使用它,我会这样做:constexprsize_tmyNum=12;foo(std::integral_constant());但我想要一种像这样使用它的方法:constexprsize_tmyNum=12;foo(myNum);有没有什么方法可以将一个数字隐式转换为相应的std::integral_constant? 最佳答案 恐怕真正的隐式转换是不可能的。但是,您可以使用宏和编译时常量检测(请参阅https://stackov

c++ - 整数类型的模板函数特化

假设我有一个模板函数:templatevoidf(Tt){...}我想为所有原始整数类型编写一个特化。执行此操作的最佳方法是什么?我的意思是:template::valueistrue>voidf(Ii){...}然后编译器为整数类型选择第二个版本,为其他所有类型选择第一个版本? 最佳答案 使用SFINAE//Foralltypesexceptintegraltypes:templatetypenamestd::enable_if::value>::typef(Tt){//...}//Forintegraltypesonly:tem

c++ - 在模板类中时枚举中的整数溢出

深入研究模板元编程,我发现C++中枚举范围的奇怪行为。我收到一个警告:表达式中整数溢出,看起来我实际上并不想要一个超出枚举范围的值。这是代码:#include#includetemplateclasspow{public:enum{result=2*pow::result};};templateclasspow{public:enum{result=1};};enumtest{one,max=4294967295};enumtest_2{last=4294967295*2};intmain(){std::cout:\t"::result:\t"::result:\t"::result:

c++ - 如何重构具有相同行的函数,唯一不同的是一个函数调用?

考虑以下代码片段templatevoidMyDynamicArray::resize(size_tcount){size_tprev_count=Count();if(countprev_count){Reserve(count);for(size_ti=prev_count;i这里是同一个函数的重载templatevoidMyDynamicArray::resize(constT&object,size_tcount){size_tprev_count=Count();if(countprev_count){Reserve(count);for(size_ti=prev_count;

c++ - 显式实例化类模板中的自动构造函数

我有一个templatestructObj在头文件(obj.h)中使用显式自动移动构造函数(=default)声明的模板。//obj.h#pragmaonce#includetemplatestructObj{std::vectormember;Obj(intm):member(m){}Obj(Obj&&)=default;intmember_fun()const;};externtemplatestructObj;externtemplatestructObj;模板的成员函数在另一个文件(obj.cpp)中定义,并显式实例化模板://obj.cpp#include"obj.h"tem

c++ - 需要一些清晰的模板实现代码

我正在开发一个带有一些模板类和方法(几乎只有模板)的C++库。我想拆分声明和实现以便于阅读。但有时它会变得很疯狂:templateclassFoo{templateclassSubFoo{};templateSubFoobar();};templatetemplateFoo::SubFooFoo::bar(){}这是一个非常小的例子......所以如果你有一些别名来改进这个,或者任何编码风格指南。我正在使用NeoVim,所以如果你知道一些可以让生活更轻松的插件,那也很好。Ps:我没有任何c++限制事实上,我忘记了C++中存在一些基本的东西,比如宏。#defineClassFootemp

c++ - 在模板化类中定义模板化类的静态数据成员

我在另一个类模板中有一个类模板。内部类有一个静态数据成员。我正在努力为它提供一个定义。以下示例适用于clang3.8但不适用于gcc-7.1templatestructOut{templatestructIn{staticintvar;};};templatetemplateintOut::templateIn::var;gcc给出错误:error:templatedefinitionofnon-template‘intOut::In::var’intOut::templateIn::var;^~~我该怎么做才能让gcc开心?编辑:结果是摆脱了template让这个工作:templat