草庐IT

if-cases

全部标签

c++ - 带有 std::enable_if 的 Visual Studio 2015 上的错误 C1001

我有一些C++11代码无法在VisualStudio2015(更新2)上编译,但在Clang和GCC上编译都没有错误。因此,我怀疑VisualStudio中存在编译器错误,但也许我的代码格式不正确。我的真实类BaseUnit是double值的模板包装类,它关注数量的物理量纲(表示为SI单位m、kg、s、)。例如,速度与时间模板实例的乘积会自动给出距离实例。当前使用标量执行乘法会出现问题。我已尽可能简化类(class)以显示问题。#includetemplateclassBaseUnit{public:constexprexplicitBaseUnit(doubleaValue):val

c++ - if constexpr 和 requires-expression 用于临时概念检查

假设,给定C++17的ifconstexpr和ConceptsTS(例如,在最近的gcc版本中),我们想检查模板函数中的类型是否具有嵌套类型:#includestructFoo{usingBar=int;};templatevoiddoSmth(T){ifconstexpr(requires{typenameT::Bar;})std::cout概念文档很少,所以我可能弄错了,但似乎就是这样(现场示例在Wandbox上)。现在让我们考虑取消注释其他doSmth调用时会发生什么。期望requires子句的计算结果为false似乎是合理的,并且将采用ifconstexpr的else分支。与此

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++ - 如何使用可变参数模板构建 switch-case

我想构建函数,例如:templateconstexprboolcheck(inti)noexcept{switch(i){casevalues[0]:casevalues[1]:...casevalues[n-1]://onlyillustrated.returntrue;default:returnfalse;}}我可以实现那个功能吗?更新:谢谢,现在我知道如何实现了:templatestructchecker;templatestructchecker{staticconstexprboolapply(inti)noexcept{returni==head||checker::ap

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