草庐IT

static-functions

全部标签

c++ - 无法推导 std::function 模板参数

我正在编写如下代码#includetemplatevoidfoo(conststd::function&handler){}voidgoo(constint&){}intmain(){foo([](constint&){});foo(goo);}不幸的是,由于以下错误,它拒绝在(clang6.0.0和gcc8.1.1)上编译candidatetemplateignored:couldnotmatch'function'against'(lambdaattest3.cpp:13:9)'candidatetemplateignored:couldnotmatch'function'agai

c++ - static_cast 带走了常量

据我所知(以及本主题:Whenshouldstatic_cast,dynamic_cast,const_castandreinterpret_castbeused?)const_cast是唯一应该能够消除变量常量性的强制转换。然而,当弄乱clang-6.0和g++5.4.0时,我偶然发现了一种与上述相矛盾的行为。看起来static_cast做的工作完全一样。这些主要函数在两个编译器中给出了完全相同的结果:测试类定义structBase{Base(){std::cout使用const_castintmain(void){std::cout(b).no_const();std::cout使

c++ - 为什么 `std::is_function_v` 没有按预期工作?

#include#include#includeusingnamespacestd;templateboolf(T&&v){returnis_function_v(v))>;}intmain(){cout输出是:(clang6.0&gcc8.0)>truefalse但我期望的结果应该是:>truetrue为什么std::is_function_v没有按预期工作? 最佳答案 您需要删除对T的引用。templateboolf(T&&v){returnis_function_v(v))>>;//~~~~~~~~~~~~~~~~~~}当se

c++ - 将 std::function 与模板一起使用

所以在最精炼的形式中,我有这样的事情发生,templateboolf(constT&a,constT&b,std::functionfunc){returnfunc(a,b);}templateboolg(constT&a,constT&b){returntrue;}但是任何调用f()的尝试,f('a','b',g),f(1,2,g),总是导致“没有匹配的函数调用‘f’”,无论我是将变量作为const引用传递还是只是普通值或其他什么。我假设它无法推断出某些模板,但我不知道在哪里或为什么。我承认,我对一般情况下如何使用函数对象的把握非常薄弱,这样做有可能吗?

c++ - 错误 : use of deleted function for overloaded template

我正在尝试模板特化,但无法确定为什么charconst*const无法在下面解析(尽管是有效类型)的原因。templateBfoo(A)=delete;templatevoidfoo(char*){}templatevoidfoo(charconst*const){}intmain(){{//typesOKcharconst*consta=nullptr;char*b=nullptr;}char*data;foo(data);//OKfoo(data);//ERRORreturn0;}错误error:useofdeletedfunction‘Bfoo(A)[withA=constcha

c++推导 "non type pointer to function"类模板参数

考虑一个模板类:templateclassProxy{voidrun(){ReturnTyperet=Fn();//...dosomething...}};//andafunctionsintfn1(){return5;}floatfn2(){return5;}这可以通过使用实例化:Proxyp1;但是显式声明返回值类型似乎是不必要的。我想要实现的是:someProxyInstantationp1;someProxyInstantationp2;不幸的是,我对c++没有任何期望,这似乎是该语言的一个隐藏角落(至少对我而言)。如果我可以从指向函数的指针获取它的类型——类似于:std::t

【C++入门到精通】C++类型的转换 | static_cast | reinterpret_cast | const_cast | dynamic_cast [ C++入门 ]

阅读导航引言一、强制转换(集成C语言的语法)二、static_cast操作符1.操作符介绍2.使用示例(1)基本类型之间的转换(2)类型之间的隐式转换(3)类指针和引用之间的转换三、reinterpret_cast操作符1.操作符介绍2.使用示例(1)将指针转换为整数(2)将整数转换为指针(3)将指向基类的指针转换为指向派生类的指针(4)将指向不同类型的指针进行转换四、const_cast操作符1.操作符介绍2.使用示例(1)移除常量性以修改对象的值(2)在函数中移除常量性以调用非常量版本的成员函数(3)移除常量性以进行底层操作五、dynamic_cast操作符1.操作符介绍2.使用示例(1)

c++ - std::binary_function - 调用不匹配?

包括#includeusingnamespacestd;intmain(){binary_functionoperations[]={plus(),minus(),multiplies(),divides()};doublea,b;intchoice;cout>a>>b;cout>choice;cout我得到的错误是:Calcy.cpp:Infunction‘intmain()’:Calcy.cpp:17:error:nomatchforcallto‘(std::binary_function)(double&,double&)’谁能解释为什么我会收到此错误以及如何消除它?

C++ 模板和 "no matching function to call"

我遇到了一个奇怪的错误。我有以下签名的功能:templatestaticboolConvertCbYCrYToRGB(constCharacteristicspace,constDATA*input,DATA*output,constintpixels){后来这样称呼:casekByte:returnConvertCbYCrYToRGB(space,(constU8*)input,(U8*)output,pixels);casekWord:returnConvertCbYCrYToRGB(space,(constU16*)input,(U16*)output,pixels);casek

c++ - 如何预期 static_assert 失败并使用 Boost.Test 框架处理它?

如果我有一个接受模板参数的方法,该模板参数应该可转换为base_of或与返回类型相同的类型,我应该怎么做?例如,考虑这个方法:templateclassIFoo{public:templateT*as(){static_assert(std::is_same::value||std::is_convertible::value||std::is_base_of::value,"IFoo::as()requiresServiceTtobeabaseofT");...}};现在,我想对其进行BOOST_CHECK!classA{};classB{};BOOST_AUTO_TEST_CASE