草庐IT

TypeName

全部标签

c++ - 模板模式匹配

考虑这个类模板:templateclassSomeClass{};现在,我想提供两个基于B==true和B==false的实现。也就是说,我想说的是:templateclassSomeClass{//Firstimplementation};templateclassSomeClass{//Secondimplementation};这如何在C++(11)中完成? 最佳答案 部分特化://primarytemplatestructFoo;templatestructFoo{};templatestructFoo{};//useFoo

c++ - 通过单个函数返回另一个函数的多个参数

由于我选择了一个误导性的问题标题,因此该问题已作为完全重复的问题关闭。这没有错,但提出了一个经常讨论的问题,例如在thisquestion.由于内容是关于Stackoverflow上从未涉及的更具体的主题,我希望重新打开这个问题。这件事现在发生了,所以问题来了。我给出了一个需要三个整数值作为参数的函数length(intx,inty,intz);。我无法修改此功能,例如接受任何结构或元组作为单个参数。有没有办法在C++中编写另一个函数,它可以用作上面函数的单个参数,比如length(arguments());?无论如何,该函数arguments();的返回类型似乎需要是int,int,

c++ - typename 关键字和嵌套名称说明符

structA{};templatestructB{typename::Aa1;//(1)typenameAa2;//(2):error};intmain(){return0;}为什么第一种情况正确,而第二种情况不正确?我不明白那个限制的意思。无论如何,为什么允许第一种情况?::A不是依赖于模板参数的名称。什么意思? 最佳答案 如果类型嵌套在从属范围内,则规则不是您只能使用typename。这些规则或多或少是:如果它在从属范围内,则必须使用typename您只能在语法允许的地方使用typename。语法允许它用于qualified-

C++ 模板特化和派生

当使用这样的模板时:classA{…}classB:A{…}classC:A{…}templateclassD{…}我需要T只能是B或C。这意味着T必须是A的派生。有什么办法吗?谢谢! 最佳答案 将std::is_base_of与std::enable_if一起使用:template::value>::type>classD{...}请注意,它会接受任何T,只要它派生自A。如果你需要T是B或者C,那么你需要修改它,使用std::is_same或/和std::conditional以及std::enable_if。你可以把它清理成:t

c++ - .containsKey() 用于 C++ 映射的方法

我想省去一些重复的工作,写一个模仿Java的函数.containsKey()方法。基本上我想要这样的东西:usingnamespacestd;mapmymap;if(!contains(mymap,"keyasstring"))cout在C++中,可以通过以下方式检查映射是否包含键:m.find(str)!=m.end();我想编写一个通用方法,如果键包含在映射中则返回true。到目前为止,我有以下内容:templateinlineboolcontains(conststd::mapm,constA&str){returnm.find(str)!=m.end();}当我在map上运行它

c++ - 如何在模板参数中将 std::result_of 转换为 decltype

在CppCon2015上,来自Microsoft的S.Lavavejsaid避免使用result_of.但我的情况是,我似乎无法找到合适的替代方案。考虑以下代码。有没有办法改变std::result_of::type使用decltype相反?#include#include#includetemplatestructNopErrCB{constexprToperator()()const{returnT();}};templatestructSafeTaskWrapper{Funcf;ErrCBerrCB;templateautooperator()(T&&...args)->decl

c++ - 成员数量可变的结构或类

我想创建一个具有可变数量类成员的结构/类,这可以在编译阶段决定(就像在模板元编程中完成的那样)示例:假设要同时指定类型和变量名称,例如TypeT1变量名称应为varName1等等......templateMyClass{T1varName1;}templateMyClass{T1varName1;T1varName2;}在主代码中可以像下面这样声明或者可以指定类型和名称的其他方式我的类对象;和MyClass::somefunc()可以访问变量名如下MyClass::somefunc(){std::cout是否可以通过C++中的模板元编程来同时指定类型和变量名?

c++ - 当 lambda 作为参数传入时推导模板参数

我正在尝试编写函数func这样编译器就可以推断出模板参数,当我传入std::function时它会起作用,但不适用于lambda:templateTResultfunc(std::functionf){returnTResult();}intmain(){//VisualStudio2013intresult=func([](){//error:'TResultfunc(std::function)':couldnotdeducetemplateargumentfor'std::function'from'main::'return100;});std::functiontestFun

c++ - std::conditional 的可变模板使用,其中一种类型是实例化失败

我正在尝试构建一个可变模板类。通常,实例化的每一级都需要通过切掉一种类型然后使用其余类型来实例化“下一级”。对于我的最终级别,与其专注于一种类型,我宁愿提供一些基本案例类型并避免重复实际逻辑。我添加了一个std::conditional打开BaseCase当其余类型由空参数包组成时。classBaseCase{};templateclassVariadicClass;templateusingNextLevel=typenamestd::conditional,BaseCase>::type;templateclassVariadicClass{Tthis_level;//whatev

C++ 如何使 template<T>f() 为整数 T 返回 -1,为指针类型返回 nullptr

我需要完成以下任务:templatef(){:return{-1ifTisofintegraltype,elsenullptr}}在我的特定用例中,T可以是四种类型之一:intPy_ssize_t//ssize_tPy_hash_t//ssize_tPyObject*//PyObjectissomeCstruct这是我迄今为止最好的解决方案:templateTtest(typenameenable_if::value,void*>::type=nullptr){return-1;}templateTtest(typenameenable_if::value,void*>::type=n