jjzjj

TypeName

全部标签

c++ - 友元函数默认模板 : Intel ICPC warning

我有以下测试代码://friendfunction.h#includetemplateclassMyClass{templatefriendinlineconstMyClassmyFunction(constT1&x,constMyClass&y);};template::value>::type>inlineconstMyClassmyFunction(constT0&x,constMyClass&y){std::cout(y);}//friendfunction.cpp#include"friendfunction.h"intmain(intargc,char*argv[]){My

c++ - 通过模板传递函数时推断的返回类型

我的问题是让编译器根据模板传递的函数的返回类型推断函数的返回类型。有什么方法可以调用吗foo(7.3)代替foo(7.3)在这个例子中:#includetemplateVfoo(Tt){returnfunc(t);}intbar(doublej){return(int)(j+1);}intmain(){printf("%d\n",foo(7.3));} 最佳答案 如果你想将bar保留为template参数,恐怕你只能接近它:#includetemplatestructtraits{};templatestructtraits{typ

c++ - 打印给定类型名称的模板

出于调试目的,我想打印一个类型的名称,所以我创建了一个函数来实现这个目的(事实上,我从另一个SO答案中借用了它,但我现在找不到),该函数看起来像这样:templatestd::stringTypeName(T){autoname=typeid(T).name();intstatus=0;std::unique_ptrres{abi::__cxa_demangle(name,NULL,NULL,&status),std::free};return((status==0)?res.get():name);}LiveDemo它工作正常:inti=0;floatf=0.f;std::cout但

c++ - 在宏中包装模板函数调用,或避免特化 void 返回

我有以下功能,允许我包装OpenGL命令并在出现问题时记录:templatestructChecker{staticResrun(conststd::string&function_name,Func&&func,Args&&...args){Resresult=func(std::forward(args)...);check_and_log_error(function_name);returnresult;}};templatestructChecker{staticvoidrun(conststd::string&function_name,Func&&func,Args&&.

c++ - 我怎样才能*有效地*从嵌套表达式生成所有类型的元组?

假设我有一些包含类型排列的模板表达式,在本例中它们来自AbstractSyntaxTree:templatestructBranch{};templatestructLeaf{};输入表达式可以是Branch的任意嵌套组合和Leaf类型,但为了简单起见,我将创建一个包含单个Leaf的线性AST包裹N层层深入Branch类型:usingExpression=Branch>;//N=2为了这个问题,我创建了一个函数来动态生成这些表达式,这样我就可以演示我在绘图方面遇到的问题。所以这里是我将用来生成我的表达式的函数://wrapLeafinBranchNnumberoftimes:templ

c++ - 在元编程中强制执行不变量

我希望能够检查元程序中使用的类的不变量。我的第一个天真的方法是templatestructdigit{static_assert((N>=0)&&(N;但是编译没有任何问题。只有在构造非法类时才会触发静态断言。添加额外的模板参数时是可能的:#includetemplate=0)&&(N::type>structdigit;usingcrash=digit;当我想将此技术应用于用作类型列表的类时:#includetemplatestructare_integral;templatestructare_integral{staticconstboolvalue=std::is_integr

c++ - 使用省略号的回退函数 : can we force the size of the parameters pack?

考虑以下代码:#include#includestructS{templateautof(A&&...args)->decltype(std::declval().f(std::forward(args)...),void()){std::coutvoidf(...){std::cout(42);//->hasf(int)s.f(42);//->hasnotf(int)//oopss.f();//->hasnotf(int)}如示例所示,对f的第三次调用工作正常,即使参数数量错误,因为对于回退函数来说它根本没有错.当以这种方式涉及省略号时,有没有办法强制参数的数量?我的意思是,我可以在

C++ 模板特化不适用于嵌套类型

以下代码可以编译,但无法运行:templatestructNesting{templatestruct_Nested{};templateusingNested=_Nested;};templatestructF{staticconstexprboolis_my_nested_class=false;};templatestructF::Nested>{staticconstexprboolis_my_nested_class=true;};我创建了这些Nesting和Nested类型,并尝试在其上使用类型特征模式。它编译(使用MSVC2014w/CPP11),但是F::Nested>

c++ - 如何使用 clang 格式分隔 lambda 的尾随返回类型

有几件事阻止我切换到clang格式。当我在应该换行到下一行的lambda上有一个尾随返回类型时,箭头和尾随返回类型之间没有空格。我该如何解决这个问题?例如,这是下面相同代码的未格式化版本的clang-format的输出autofunc(){return[.......](autoone,autolong_parameter_list,autoanother)->SomeLongReturnType;//^^^^^^^^^^^^^^^^^^^^^HowcanIaddaspaceinbetweenthose?} 最佳答案 TL;TR:升

C++ 模板元编程 : how to deduce type in expression pattern

我想要静态检查lambda的参数类型。我在下面编写了这段代码,它似乎产生了正确的结果。structB{};autolamBc=[](Bconst&b){std::coutconstexprautoArgType(R(ClosureType::*)(Arg)const)->Arg;templateusingArgType_t=decltype(ArgType(&T::operator()));//ArgType_tis"referencetoBconst"但是,我注意到,例如,标准库使用类模板特化从std::remove_reference中的引用类型中提取引用类型。所以我尝试了这种方法