草庐IT

enable_if_c

全部标签

c++ - 什么是使用 __if_exists 的好案例?

我什么时候使用__if_exists无需编写大量糟糕的代码?看起来这个关键字类似于C预处理器指令,但在预处理器之后进行处理。并且IntelliSense不会解析它并将代码突出显示为死或活。这些共同使得对使用__if_exists编写的代码的分析变得非常重要。到目前为止,我只发现了一个相对安全的案例。我们有一个容器类,它接受存储对象的地址。当存储的类具有重载的operator&时,将调用重载的运算符,这会导致问题。所以我添加了以下检查:__if_exists(T::operator&){static_assert(false);}现在,如果存储的类型是operator&成员函数,那么代码

c++ - enable_if 继承的成员函数的名称查找错误

我偶然发现了这个奇怪的名称查找问题,其中基类成员函数似乎根本不参与重载选择,即使它是使用using语句导入的。基类和派生类的成员函数都是带有enable_if_t的SFINAE。我能够使用以下代码重现我的问题:https://gcc.godbolt.org/z/ueQ-kY#include#includeclassMyTag{};structBase{templatestd::enable_if_t::value>create(RType/*&&*/ref){std::coutstd::enable_if_t::value>create(Tag/*&&*/tag){std::cout虽

c++ - "if constexpr"在模板之外有用吗?

我试图完全理解ifconstexpr。我明白,如果ifconstexpr(expr)在模板中使用,并且expr依赖于模板参数,那么在实例化期间,只有一个then/else分支会被实例化,其他的会被丢弃。我有两个问题:如果expr不依赖于模板参数,那么ifconstexpr(expr)的分支不会被丢弃,这是真的吗?如果是,标准在哪里这样说?我看不出标准在哪里有异常(exception),只有当expr依赖时才会发生丢弃。ifconstexpr在模板之外有用吗?如果是,这有哪些用例?你能举一些例子来理解它的用处吗? 最佳答案 Isitt

c++ - 如何使用 shared_ptr 并从 enable_shared_from_this 继承来制作克隆方法

我已经看到编写返回boost::shared_ptr的克隆方法的一种有用方法是做classA{public:shared_ptrClone()const{return(shared_ptr(CloneImpl()));}protected:virtualA*CloneImpl()const{return(newA(*this));}};classB:publicA{public:shared_ptrClone()const{return(shared_ptr(CloneImpl()));}protected:virtualB*CloneImpl()const{return(newB(*

c++ - 类型特征 : Check if class have specific function (maybe inherit)

我知道有很多方法可以检测一个类是否具有特定功能,但没有一种方法真正适合我的具体情况。我当前用于检查正确成员函数的实现工作正常,继承函数除外。#includetemplateclassHasFoo{templatestructCheck;templatestaticstd::true_typeTest(Check*);templatestaticstd::false_typeTest(...);public:staticconstexprboolvalue=decltype(Test(0))::value;};structA{intfoo(float);};structB:publicA

c++ - 使用虚函数代替 IF 语句更快?

我记得在某个地方在线阅读过,在极低延迟的情况下,最好使用虚函数代替IF语句。这是真的吗?他们基本上是说动态多态性更适合速度情况吗?是否有任何用户可以分享任何其他C++低延迟“怪癖”? 最佳答案 我非常怀疑单个if/else语句会比使用虚函数慢:虚函数通常会强制执行管道停顿并限制优化机会。if语句可能会使流水线停止,但如果它经常被执行,则预测可能会以正确的方式进行。但是,如果您的选择是介于几个if/else语句的级联与仅一个虚函数调用之间,那么后者可能更快。此外,如果通过使用虚拟函数与分支执行的总代码是不同的函数,最终会小得多,这可能

c++ - 使用 enable_if 为有符号和无符号变量创建可变参数构造函数

我想为一个类创建一个构造函数,使用任何整数类型,但要区分有符号和无符号。我不希望它成为类本身的模板。以下不起作用。VisualStudio只是说没有参数匹配。classThing{public:templateThing(typenamestd::enable_if::value&&!std::is_same::value&&std::is_signed::value,Integral>::typenum){//constructorusingsignedvariableasinput}templateThing(typenamestd::enable_if::value&&!std:

c++ - if-else 取决于 T 是否为完整类型

如何在某个.cpp中判断某个类型是否为完整类型?templateclassTest{//somefieldsvoid(*functor)(T*)=[](T*){};//^willbewrittenbysome.cppthatcanaccessTascomplete-typeT*t=nullptr;voidfComplete(){deletet;//faster/**^somecodethatusecompletetype*/}voidfForward(){functor(t);//slower/**^somecodethatforwarddeclarationisenough*/}vo

c++ - SFINAE: std::enable_if 作为函数参数

因此,我正在按照此网页某处的代码设置的示例进行操作:http://eli.thegreenplace.net/2014/sfinae-and-enable_if/这是我所拥有的:templatevoidfun(consttypenamestd::enable_if_t::value,T>&val){std::cout";}templatevoidfun(consttypenamestd::enable_if_t::value,T>&val){std::cout";}intmain(){fun(4);fun(4.4);}这样我就得写:fun(4);fun(4.4);我该如何避免这种情况?

c++ - 为什么 enable_if 不能在这里工作?

我有这段代码,我期望会有两个不同版本的运算符()基于模板参数的类型。#include#includetemplatestructImpl{std::enable_if_t::value,T>operator()(conststd::string&key,intnode){returnstatic_cast();}std::enable_if_t::value,T>operator()(conststd::string&key,intnode){returnnewT();}};intmain(){}相反,我在编译时遇到错误:'std::enable_if_t::value,T>Impl: