草庐IT

Templates

全部标签

c++ - 成员函数作为函数模板的参数

我想注册回调函数,并将它们存储在一个vector中以供调用。还应该允许使用成员函数作为回调函数。我最初的方法是使用通过以下方式:#include#include#includestd::vector>functions;structFoo{voidBar(){std::coutvoidRegister(T*obj,std::functionfunction){functions.push_back(std::bind(function,obj));}voidmain(){Foofoo;Register(&foo,&Foo::Bar);}这不起作用,因为编译器无法推断参数类型。只有当我明

c++ - 具有可变参数模板的功能组合

我的目标是让函数组合使用这种精确语法:intmain(){Functionf([](conststd::string&s){returns.length();});Functiong([](intx){returnx+0.5;});Functionh([](doubled){returnint(d+1);});std::cout通过稍微更改语法,使"hello"参数先出现,我可以轻松地使用以下代码:#include#include#include#includetemplatestructFunction{usingdomain=constD&;usingrange=R;usingfu

c++ - 当 C++ 中也有非模板函数时,调用专门的模板函数

在这个例子中,怎么可能调用第二个函数呢?templateTsquare(Ta){std::coutintsquare(inta){std::cout提前致谢! 最佳答案 通过显式指定模板参数调用特化:square(2);LiveDemo 关于c++-当C++中也有非模板函数时,调用专门的模板函数,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/36176398/

具有类成员的 C++ 模板类

我在模板方面没有太多经验,但我正在努力学习,所以有人可以告诉我我该怎么做才能完成这项工作,因为我已经看到了很多使用类型名的例子和显式实例化和显式特化,但它们只包括基本类型,如int、char、...所以请帮忙,因为我不知道该怎么做。容器.h#ifndefCONTAINER_H#defineCONTAINER_HtemplateclassContainer{private:Eelement;public:Container(EpElement);virtual~Container();};#endif//CONTAINER_H容器.cpp#include"Container.h"#inc

C++ - 通过 enable_if_t 推导参数包(可变参数模板)构造函数和复制构造函数

更新:谢谢你,大露营。这是最后的structA.structA{template>A(Args&&...args){cout,A>::value>>A(Arg&&arg){cout来源:关于这段代码,#include#include#includeusingnamespacestd;structA{template>,A>::value>>A(Args&&...args){cout输出是vvvvm在VC++14.0中。但是为什么输出不是vvccm?(我希望candd使用复制构造函数。而且我知道EffectiveModernC++Item27只使用一个转发引用。)

模板参数上的 C++ 函数模板重载

是否可以像这样重载函数模板(仅在使用enable_if的模板参数上):template::value>>voidfn(Tt){}template::value>>voidfn(Tt){}如果enable_if中的条件不重叠?我的MSVS编译器提示说,'voidfn(T)':functiontemplatehasalreadybeendefined。如果不是,替代方案是什么(最好不要将enable_if放在模板参数以外的任何地方)? 最佳答案 默认参数在确定函数的唯一性方面不起作用。所以编译器看到的是您定义了两个函数,例如:templ

c++ - 使用 std::enable_if 作为函数参数与模板参数有什么区别?

我想知道使用std::enable_if有什么区别?作为函数参数还是模板参数?我有以下两个函数模板:#includetemplatevoidf_function(T,typenamestd::enable_if_t::value,int>=0){}template::value>>voidf_template(T){}intmain(){intx=1;f_function(x);f_template(x);}产生以下程序集(从https://godbolt.org/g/ON4Rya开始):main:pushq%rbpmovq%rsp,%rbpsubq$16,%rspmovl$1,-4(

c++ - 关于C++17中类模板参数推导的问题

我正在尝试理解P0091r3(已被纳入当前C++标准草案N4606的“类模板的模板参数推导”论文)。我相信我理解它在最简单的可能情况下是如何工作的,其中template-name标识单个模板:templatestructS{S(T);S(conststd::vector&);};intmain(){std::vectorv;autos=S(v);}S标识主模板,因此我们创建一个虚构的重载集,其中包含templatevoidSctor(T);templatevoidSctor(conststd::vector&);并对虚构调用执行重载决议Sctor(v)确定在这种情况下我们要调用虚构的S

c++ - 类型组的模板类的成员特化?

我有一个矩阵类,我想针对不同的矩阵类型(int、float、double)以不同的方式将矩阵打印到终端。我想实现这个:如果矩阵类型ifint,使用printf("%d",matrix[i][j])打印矩阵如果矩阵类型iffloat或double,使用printf("%.3f",matrix[i][j])打印矩阵否则,抛出错误以下是我所拥有的相关部分:...templateclassMatrix2D{private:std::vector>matrix;public:...voidprint()const;//printthewholematrix}...templatevoidMatr

c++ - 具有函数和模拟部分模板特化的 SFINAE

我正在尝试创建一个函数X,它在提供成员函数Y时专门化,如果未提供成员函数Y,则函数X使用全局非成员函数Y来实现相同的效果。我目前正在尝试使用以下代码实现此目的template().y()),decltype(std::declval().y())>::value>*=nullptr>voiddo_something(Container&&container){returnstd::forward().y();}template().y()),decltype(std::declval().y())>::value>*=nullptr>voiddo_something(Container