草庐IT

c++ - 带有复制构造函数的 enable_if

我第一次尝试std::enable_if并且很挣扎。任何指导将不胜感激。作为玩具示例,这是一个简单的静态vector类,我想为其定义一个复制构造函数,但行为取决于vector的相对大小:只需将数据复制到更小或相同大小的vector中将数据复制到一个更大的vector中,然后用零填充其余部分所以vector类是:templateclassVector{double_data[_Size];public:Vector(){std::fill(_data,_data+_Size,0.0);}constdouble*data()const{return_data;}//...};复制构造函数应

c++ - 在类定义之外使用 enable_if 实现函数

所以基本上,我现在有一个非常基本的通用类,目前正在测试type_traitsheader。我目前正在尝试制作一个函数来处理某些类型,即现在的算术类型。#includetemplateclassTest{public:templatetypenamestd::enable_if::value>::typeprint();};该函数完美运行且仅适用于算术类型。但我喜欢保持我的类整洁,只有它们有原型(prototype),而函数实现在类之外。使用标准模板即voidtest();templatevoidTest::test(){}这很简单,我知道怎么做,但我不知道如何用“std::enable

C++ 错误 : ‘_mm_sin_ps’ was not declared in this scope

我正在尝试对将函数应用于数组的不同方法进行基准测试。为什么是https://software.intel.com/sites/landingpage/IntrinsicsGuide/#expand=3260,2124,4779,4779&cats=Trigonometry&text=_sin_mm_sin_ps在我的范围内未知,但_mm_sqrt_ps是?我如何让它为人所知?并编译无误。#include#include#include#include#include#include#include"immintrin.h"#includeintmain(){std::coutdis(-

C++ - std::enable_if 更多类型

我有一个函数:template::value==true>::type*=nullptr>voidtest(Ti){//processdata}有效。但是,我不仅需要为int启用此功能,还需要为float和constchar*启用此功能......如何无需将相同的方法写3次就可以做到这一点? 最佳答案 像这样:template::value||std::is_same::value||std::is_same::value>::type*=nullptr>voidtest(Ti){//processdata}

c++ - 构造函数上的 SFINAE 在 VC2017 中有效,但在 clang/gcc 中无效

这个问题在这里已经有了答案:std::enable_iftoconditionallycompileamemberfunction(8个答案)关闭4年前。#includetemplatestructS{template>S(){}template>S(int){}};Ss{};//errorinclang/gcc,OKinVC2017Ss{0};//errorinclang/gcc,OKinVC2017在这两种情况下,clang/gcc都尝试实例化由于SFINAE实际上应该丢弃的ctor。错误信息是:error:notypenamed'type'in'std::enable_if';'

c++ - 检测和调整负零

我有一些代码已经从Java移植到C++//sincethispointisavectorfrom(0,0,0),wecanjusttakethe//dotproductandcomparedoubler=point.dot(normal);return(r>=0.0);但在C++中,当r等于时,r可以是+0.0或-0.0-0.0未通过检查。我试图在下面的代码中调整负零,但它从未达到DEBUG("Negativezero")行。但是r2确实打印出等于+0.0。//sincethispointisavectorfrom(0,0,0),wecanjusttakethe//dotproduct

c++ - std::enable_if 的模糊部分特化

我在如下情况下遇到了问题:#include#include#defineTRACEvoidoperator()()const{std::cerrstructcheck:std::true_type{};templatestructconvert{TRACE;//firstcase};templatestructconvert::value&&check::value),void>::type>{TRACE;//secondcase};templatestructconvert::value),void>::type>{TRACE;//thirdcase};然后convertc;c();

c++ - 来自同一个 enable_shared_from_this 实例的两个 shared_ptr

鉴于这个类是enable_shared_from_this:classconnection:publicstd::enable_shared_from_this{//...};假设我从sameconnection*创建了两个std::shared_ptr实例,如下所示:std::shared_ptrrc(newconnection);std::shared_ptrfc(rc.get(),[](connectionconst*c){std::cout到目前为止一切正常,因为资源{connection*}由单个shared_ptr—rc准确地说,fc只是有一个假的删除器。之后,我这样做:a

c++ - 从 enable_if 基础继承

我正在尝试为非字符数组部分特化一个特征:templatestructis_container:std::false_type{};templatestructis_container:std::enable_if::value,std::true_type>::type{};VisualStudio2010给了我一个C2039(type不是enable_if的元素...)。但是,SFINAE不应该在这里触底而不是给出编译器错误吗?或者SFINAE不适用于这种情况?当然,我可以将非字符和字符的特化分开:templatestructis_container:std::false_type{

c++ - enable_if : minimal example for void member function with no arguments

我试图更好地理解C++11中的std::enable_if并且一直在尝试编写一个最小的示例:一个类A带有成员函数voidfoo()根据类模板中的类型T具有不同的实现。下面的代码给出了期望的结果,但我还没有完全理解它。为什么版本V2有效,但V1无效?为什么需要“冗余”类型U?#include#includetemplateclassA{public:A(Tx):a_(x){}//EnablethisfunctionifT==int/*V1*///template::value,int>::type=0>/*V2*/template::value,int>::type=0>voidfoo(