草庐IT

unary_function

全部标签

c++ - std::is_function 的实现 - 为什么我的实现表现不同?

我有以下is_function的实现:templatestruct_is_function_helper:public_false_expression{};templatestruct_is_function_helper:_true_expression{};templatestruct_is_function_helper:_true_expression{};templatestruct_is_function:public_boolean_expression::Type>::Type>::value>{};我删除引用、cv限定符,然后尝试从与_is_function_hel

c++ - Visual C++ 中的 __PRETTY_FUNCTION__

在VisualStudio2017(确切地说是15.5.6)中使用VisualC++时,我注意到GCC中的__PRETTY_FUNCTION__似乎可以工作!-至少在某种程度上……它确实在输入时出现了建议:它的值也如预期的那样显示在工具提示中:但是使用__PRETTY_FUNCTION__编译代码会导致错误:errorC2065:'__PRETTY_FUNCTION__':undeclaredidentifier那么,有什么方法可以让它在VisualC++中工作吗?有些可能包括?或者一些特殊的编译设置?(我想我使用的是默认值。)为什么它在所示示例中有效,但在实际使用中却无效?!请注意,

c++ - 有没有办法把 "inline"关键字的两种含义分开(ODR relaxation vs. function code inlining)

我想我完全理解C++中inline关键字的含义。具体来说,它意味着两个半相关的事情:对于声明为inline的函数放宽了ODR规则。因此,您可以在多个TU中定义相同的功能符号,而不会在链接它们时出现错误。这允许在header中定义函数。这是对编译器的一个建议,它应该用函数编译代码的拷贝替换函数的调用,而不是对地址的调用指令函数符号。我可以理解这两个含义在一个方向上必然相关:2必须暗示1。#2要求函数定义对所有调用该函数的TU可用。因此函数定义必须存在于多个TU中。因此需要放宽ODR以避免链接器错误。但我的问题是关于另一个方向-为什么语言设计为1必须暗示2?在某些情况下和对于某些设计决策,

c++ - 使用 std::function 作为 lambda 参数调用函数

我从这里得到的问题的基础:Failuretodeducetemplateargumentstd::functionfromlambdafunction这个线程中的问题是:为什么这段代码不能将lambda传递给函数:#include#includetemplatevoidcall(std::functionf,Tv){f(v);}intmain(intargc,charconst*argv[]){autofoo=[](inti){std::cout这个线程中的答案是,因为lambda不是std::function。但是为什么要编译这段代码:#include#includetemplate

c++ - 如何序列化 boost::function 以将其发送到 message_queue

我实际上正在尝试使用boost::serialize序列化一个boost::function,因为我想在boost::interprocess::message_queue中共享它。我只看到一种方法,即使用boost::serialize的非侵入式版本。namespaceboost{namespaceserialization{templatevoidserialize(Archive&ar,boost::function&fct,constunsignedintversion){ar&fct.args;ar&fct.arity;ar&fct.vtable;ar&fct.functor

c++ - std::function 和信号/槽系统

我正在尝试在没有boost的情况下用C++创建一个简单的信号/槽系统,但是当我尝试将它与参数一起使用时遇到了一些问题,这是我的代码:我的信号类:templateclassSignal{private:typedefstd::functionSlot;public:Signal();voidconnect(Slotslot);voidemit(Tdata);voidemit();private:std::vectorslots;};我的测试类:classObject{public:Object();voidsayHello(inti);};所以,我这样使用我的类:Signalsignal

C++ 类变量 std::function 具有默认功能并且可以更改

需要在类中有一个函数变量,它具有默认功能并且它的功能可以被覆盖。例如我喜欢/想做的事情(不幸的是没有成功):#include#includeusingnamespacestd;classBase{public:std::functionmyFunc(){cout我知道,这段代码无法编译。任何人都可以帮助解决这个问题,或者推荐一些东西。不需要是std::function,如果有另一种方法来实现这个逻辑。也许应该使用lambda?! 最佳答案 更改为:classBase{public:std::functionmyFunc=[](){c

c++ - 带有 std::function 参数的重载运算符

我正在研究多类型map架。它适用于所有原始类型以及结构,例如观点。但是,如果我想添加std::function作为另一个支持的类型(用于回调),那么编译器会提示:MT.cpp:426:15:Noviableoverloaded'='MT.h:31:7:Candidatefunction(theimplicitcopyassignmentoperator)notviable:noknownconversionfrom'(lambdaatMT.cpp:426:17)'to'constsharkLib::MT'for1stargumentMT.h:31:7:Candidatefunction

c++ - __builtin__FUNCTION() 是否有 MSVC 等价物?

根据这个answer我们可以在GCC中使用__builtin__FUNCTION()找到调用函数的名称。是否有MSVC等效项? 最佳答案 std::source_location将是future的跨平台解决方案,让您可以:voidlog(conststd::string&message,conststd::experimental::source_location&location=std::experimental::source_location::current()){std::cout在此之前,我所知道的最佳解决方案是使用宏

c++ - 如何将 `void(*fn)(const char *, ...)` 转换为 `std::function`,反之亦然

typedefvoid(*fn1)(constchar*,...);typedefstd::functionfn2;//hasinitializerbutincompletetype直觉上,这些对我来说实际上是一样的,但显然我的直觉让我失望了。我将如何协调这些数据类型?fn2为什么是不完整的类型?需要对fn2的签名进行哪些更改,以允许我为其分配fn1类型?创建要分配给fn2的lambda时,如何访问可变参数列表?换句话说,等价于以下的lambda是什么?voidfn1_compatible(constchar*format,...){va_listargs;va_start(args,