草庐IT

forward_static_call

全部标签

c++ - 错误 : called object type 'int' is not a function or function pointer

我在这里写了一个快速排序:voidswap(int&a,int&b);intmid(intlo,inthi);//Myquicksortimplementationvoidsort(intvec[],intlo,inthi){intmid;if(hi>lo){inti=lo+1;intj=hi;intp=mid(lo,hi);swap(vec[lo],vec[p]);mid=vec[lo];while(i=mid);swap(vec[i],vec[j]);}}i++;swap(vec[lo],vec[i]);sort(vec,lo,i);sort(vec,j,hi);}}voidswa

c++ - SFINAE:static_assert 与 std::enable_if

以下(建议!)语法有什么缺点吗?templatevoidf()static_assert(std::is_same::value){;}而不是SFINAE(看起来像拐杖):template::value>::type>voidf(){;}甚至更糟:templatetypenamestd::enable_if::value>::typef(){;}其中禁止使用auto推导结果类型。 最佳答案 首先,它们是不同的,特别是它们不是同时检查的。关键的区别在于它们在重载解析方面的应用。SFINAE将从重载集中剔除函数,以便选择另一个函数(如果

c++ - SFINAE:static_assert 与 std::enable_if

以下(建议!)语法有什么缺点吗?templatevoidf()static_assert(std::is_same::value){;}而不是SFINAE(看起来像拐杖):template::value>::type>voidf(){;}甚至更糟:templatetypenamestd::enable_if::value>::typef(){;}其中禁止使用auto推导结果类型。 最佳答案 首先,它们是不同的,特别是它们不是同时检查的。关键的区别在于它们在重载解析方面的应用。SFINAE将从重载集中剔除函数,以便选择另一个函数(如果

c++ - 通过 static_assert 强制执行模板类型

我试图了解static_assert的用处,我想知道它是否可以帮助我执行设计,如果可以,如何。我有一个通用模板类,它将自己的实现隐藏在另一个模板类中,该模板类根据模板类型的大小部分专门化。以下是此设计的简要概述:templatestructHelper;templatestructHelper{staticTbar();};//...otherspecializations...templateclassFoo{public:Tbar(){returnHelper::bar();}};Foo仅在大小为T时才被支持由Helper的特化支持。例如,Foo和Foo都支持。然而,假设用户试图构

c++ - 通过 static_assert 强制执行模板类型

我试图了解static_assert的用处,我想知道它是否可以帮助我执行设计,如果可以,如何。我有一个通用模板类,它将自己的实现隐藏在另一个模板类中,该模板类根据模板类型的大小部分专门化。以下是此设计的简要概述:templatestructHelper;templatestructHelper{staticTbar();};//...otherspecializations...templateclassFoo{public:Tbar(){returnHelper::bar();}};Foo仅在大小为T时才被支持由Helper的特化支持。例如,Foo和Foo都支持。然而,假设用户试图构

c++ - C++ 中的命名冲突 : How to access a struct member called "class"

我在使用xlib库时遇到了一个命名问题:我正在使用一个结构,它有一个名为“类”的成员。我假设这个库主要用于纯C程序。所以没有问题。但我正在用C++编程,这里的名称“类”是一个关键字,不能用来表示变量。所以,如果我通过访问结构myvariable=mystruct->class;我收到了错误:“class”之前的预期unqualified-id鉴于我无法更改结构本身,尽管存在命名冲突,我如何访问该结构成员? 最佳答案 GiventhatIcannotchangethestructitself,howcanIaccessthisstru

c++ - C++ 中的命名冲突 : How to access a struct member called "class"

我在使用xlib库时遇到了一个命名问题:我正在使用一个结构,它有一个名为“类”的成员。我假设这个库主要用于纯C程序。所以没有问题。但我正在用C++编程,这里的名称“类”是一个关键字,不能用来表示变量。所以,如果我通过访问结构myvariable=mystruct->class;我收到了错误:“class”之前的预期unqualified-id鉴于我无法更改结构本身,尽管存在命名冲突,我如何访问该结构成员? 最佳答案 GiventhatIcannotchangethestructitself,howcanIaccessthisstru

c++ - 为什么强类型枚举可以用没有static_cast的整数初始化?

enumclassE{};intmain(){Ee1{0};//okEe2=0;//notok//error:cannotinitializeavariableof//type'E'withanrvalueoftype'int'}我的编译器是clang4.0,带有选项-std=c++1z。预计Ee2=0;不行,因为E是强类型的。不过,让我吃惊的是Ee1{0};应该没问题。为什么没有static_cast可以用整数初始化强类型枚举? 最佳答案 看reference自C++17起允许使用列表初始化器:Bothscopedenumerat

c++ - 为什么强类型枚举可以用没有static_cast的整数初始化?

enumclassE{};intmain(){Ee1{0};//okEe2=0;//notok//error:cannotinitializeavariableof//type'E'withanrvalueoftype'int'}我的编译器是clang4.0,带有选项-std=c++1z。预计Ee2=0;不行,因为E是强类型的。不过,让我吃惊的是Ee1{0};应该没问题。为什么没有static_cast可以用整数初始化强类型枚举? 最佳答案 看reference自C++17起允许使用列表初始化器:Bothscopedenumerat

c++ - 如何将static_assert与sizeof和stringify结合起来?

内存使用在我的应用程序中非常重要。因此,我有特定的断言,在编译时检查内存大小,如果大小与我们之前认为正确的大小不同,则给出static_assert。我已经定义了一个这样的宏:#defineCHECKMEM(mytype,size)static_assert((sizeof(objectType)==size)),"Sizeincorrectfor"#mytype"!");这个宏可以很容易地写出来:CHECKMEM(Book,144);CHECKMEM(Library,80);问题在于,当这个static_assert关闭时,可能很难找出新的大小应该是多少(例如,通过使用隐藏的编译器选