草庐IT

function-call-operator

全部标签

c++ - 从结构中调用 Pointer-to-Member-Function 指向的函数

我有一个具有特殊数据结构的类Test。Test类的成员是std::map,其中键是std::string,映射值是struct定义如下:typedefstruct{void(Test::*f)(void)const;}pmf_t;map初始化正常。问题是当我试图调用指向的函数时。我编了一个重现问题的玩具示例。在这里:#include#includeusingnamespacestd;classTest;typedefvoid(Test::*F)(void)const;typedefstruct{Ff;}pmf_t;classTest{public:Test(){pmf_tpmf={&T

c++ sizeof operator - 指向double的指针

我在使用sizeof运算符(C++)时得到了意想不到的结果。在主课中,我有这些行double*arguments_=newdouble();*arguments_=2.1;*(arguments_+1)=3.45;cout这给我输出480Doublesize是8个字节,而且(sizeofarguments_[0])=8。但是,为什么(sizeofarguments_)也不是用字节表示的(2*8=16)?sizeof运算符是否适用 最佳答案 两个值都以相同的单位表示。你有一个32位系统,所以地址的大小是32位,或4个字节。在你的系统上

c++ - 在 C++ 中输出短路 `operator<<`

我有一些代码散布着这样的结构if(debug){Output现在我想做的是写一个流类Debug,我可以这样写Debug如果设置了一些全局标志,那么这将生成输出,否则不会。现在:这可以很容易地通过使Debug返回一个流到/dev/null来完成,这将吞噬输出。问题是f1()仍然会被评估(并“渲染”成可能更昂贵的文本表示),这可能对性能非常不利。现在我的问题是:是否有任何技巧可以跳过的“评估”"f1:"如果Debug决定不应该进行任何输出,则完全?类似于C++为f()&&g()做的短路,如果f()是false(我认真考虑过编写一个使用&&作为输出运算符的流类,但从我读到的内容来看,对于重载

c++ - clang++ (3.3/Xcode) 中 std::function 的定义在哪里

问题已解决=>看到最后的更新我正在尝试使用std::function但看起来只包括不提供定义。我试图编译以下代码:#includestd::functionf=nullptr;以c++11作为编译选项:%clang++-c-std=c++11t.cc原因:t.cc:3:6:error:notypenamed'function'innamespace'std'std::functionf=nullptr;~~~~~^t.cc:3:14:error:expectedunqualified-idstd::functionf=nullptr;^2errorsgenerated.我错过了什么?我

c++ - C++ 模板是否能够从父类获取 "forward any class function"?

classFoo{public:voidmethodA();};classManagedFoo{FoofooInst;public:voidmethodA(){doSomething();fooInst.methodA();}};现在我想把ManagedFoo做成一个模板,管理任何类而不仅仅是Foo,并且在调用Foo的任何函数之前,先调用doSomething。templateclassManager{_TyManaged_managedInst;voiddoSomething();public:/*Forwardeveryfunctioncalledby_managedInst*//

c++ - 错误 C2731 : 'wWinMain' : function cannot be overloaded

我将一个旧项目从VC6升级到VS2008,现在我得到这个编译错误:errorC2731:'wWinMain':functioncannotbeoverloaded在这些代码行:intAPIENTRY_tWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnCmdShow)同一项目在VC6下编译良好。 最佳答案 谢谢大家,我终于找到了真正的罪魁祸首,这是一个错字,我使用LPSTRlpCmdLine而不是LPTSTRlpCmdLine。真正的谜团是为什么

c++ - std::function 与函数指针

这个问题在这里已经有了答案:ShouldIusestd::functionorafunctionpointerinC++?(6个答案)关闭7年前。有什么区别吗?“保存/传输”功能的最佳方式是什么?functionfcn=[](intpar){std::cout

c++ - __has_cpp_attribute 不是 'function-like' 宏?

我正在尝试将[[deprecated]]属性引入我的代码库。然而,并不是所有我需要支持的编译器都支持这种语法(在attributestandardizationproposalN2761中描述了标准化之前不同编译器使用的各种方法)。因此,我尝试在此属性中有条件地编译,首先使用__has_cpp_attribute类宏函数(如果可用),如下所示:#ifdefined(__has_cpp_attribute)&&__has_cpp_attribute(deprecated)#defineDEPRECATED(msg)[[deprecated(msg)]]#elifOTHER_COMPILE

c++ - std::bind 分配给 std::function

我想要一个std::function类型的变量.这是未能做到这一点的简单示例。我想了解的是:当我调用jj_2a(5,6)时,编译器不会提示什么是auto?该函数绑定(bind)了所有参数。但如果我不使用auto,我会得到我期望的行为(带参数的编译错误)。这么清楚function根本不是自动决定的。如果我绑定(bind)第一个参数而不是第二个参数(jj_3),那么使用两个参数调用会起作用(但根据我的心智模型,会丢弃错误的参数)而使用一个参数调用(我认为应该起作用)不编译。使用std::functional对于jj_3_f说“没有可行的转换”,尽管到目前为止错误消息对我没有帮助。有关编译器

c++ - std::function 的类型推导

以下代码不会编译,因为在编译时没有调用匹配的std::function构造函数。templateYinvoke(std::functionf,Xx){returnf(x);}intfunc(charx){return2*(x-'0');}intmain(){autoval=invoke(func,'2');return0;}但是是否有可能提供与上面示例中预期的相同(或相似)的功能?有没有一种优雅的方法可以让函数接受任何Callable:invoke([](intx)->int{returnx/2;},100);//Shouldreturnint==50bool(*func_ptr)(d