草庐IT

member-functions

全部标签

c++ - 将 std::bind 与 boost::signals2 一起使用是否安全?

使用std::bind将成员函数传递给boost::signals2::signal::connect()是否安全?换句话说,boost::bind和std::bind可以互换吗?它使用VC++2010SP1编译,但模板代码让我难以理解,恐怕我可能会冒险进入未定义的行为领域。 最佳答案 我在这方面没有经验,因为我希望connect接受任何实现有效函数调用运算符的东西。使用与签名匹配的任何函数或函数对象调用它应该是安全的,无论是boost::bind、std::bind还是其他任何东西。Boost库被设计为通用的,因此它们通常不会互相

c++ - spirit::qi :将继承的属性引用传递给 phoenix::function

以下代码是我正在尝试做的事情的简化版本。基本上,我有结构(玩具代码中的int_holder)和一个容器数据成员。我想插入一个对象(在本例中为int)并向父qi::rule返回一个指向新插入对象的指针。我通过引用将int_holder传递给语法,以便在解析时用值填充它,因此int_holder将是语法的继承属性。代码:#include#include#include#include#includenamespaceqi=boost::spirit::qi;namespacephoenix=boost::phoenix;structint_holder{int_holder(){}std:

c++ - 如何在 C++ 中重载 std::function 签名

我知道以前有人问过这个问题,但尽管我是一个相当有经验的编码员,但我不明白答案,也没有办法回应这些以前的问题来要求澄清。没有“回复”链接或任何东西。此外,那些问题已经很老了。所以,我重新问这个问题。我有一个类,我在其中重载+=运算符。我希望一个重载采用裸函数指针,而另一个采用std::function:voidoperator+=(void(*handler)());voidoperator+=(functionhandler);用法:MyClassa;a+=[](){DoSomething();};a+=[](void*x,Ty){DoSomething();};不幸的是,代码没有编译

c++ - 对齐 : warning C4316 in all classes that have aligned members

今天我遇到了很多麻烦,因为我跟踪了一个非常隐蔽的腐败漏洞。我想如果我真的注意警告就不会那么难找到它,但由于找不到有关为什么弹出此特定警告的相关信息,我让它滑动了,这是一个错误。所以这是VisualStudio2013给我的有罪警告:warningC4316:objectallocatedontheheapmaynotbealigned16它是在通过const引用将align(16)临时传递给构造函数时生成的,如以下代码所示:classVector{};__declspec(align(16))classVectorA{};classShape{public:Shape(constVec

c++ - 为任意类型删除实现小缓冲区优化的简单方法(如在 std::function 中)。

我倾向于使用类型删除技术。它通常看起来像这样:classYetAnotherTypeErasure{public://interfaceredirectedtopImplprivate://Adaptingfunctiontemplate...friendYetAnotherTypeErasuremake_YetAnotherTypeErasure(...);classInterface{...};templateclassConcretefinal:publicInterface{//redirectingInterfacetoAdaptee};std::unique_ptrpImp

c++ - 由 traits [policies, actually] 实例化的类成员函数

我不愿意说我想不通,但我想不通。我用谷歌搜索并搜索了StackOverflow,但一无所获。这个问题的抽象形式可能过于模糊,我如何使用traits-pattern来实例化成员函数?[更新:我在这里使用了错误的术语。应该是“政策”而不是“特质”。特征描述现有的类。策略规定合成类。]在对我10多年前编写的一组多元函数优化器进行现代化改造时出现了这个问题。所有优化器都通过选择远离当前最佳点(“更新”)的参数空间的直线路径进行操作,然后在该线上找到更好的点(“线搜索”),然后测试“完成”条件,如果没有完成,则进行迭代。有不同的方法来进行更新、行搜索、完成测试和其他事情。连连看。不同的更新公式需

c++ - 如何在不传递大量参数的情况下处理类的 "many small functions"的想法?

随着时间的推移,我开始欣赏许多小函数的思维方式,我真的很喜欢它,但我很难摆脱羞怯将它应用到类中,尤其是那些有很多小函数的类非公共(public)成员变量。每个额外的辅助函数都会使界面变得困惑,因为代码通常是特定于类的,我不能只使用一些通用代码。(据我所知,无论如何,还是一个初学者,不知道那里的每个图书馆等)所以在极端情况下,我通常会创建一个辅助类,它成为需要操作的类的友元,因此它可以访问所有非公共(public)内容。另一种方法是需要参数的自由函数,但即使过早优化是邪恶的,而且我还没有真正分析或反汇编它......我仍然害怕有时仅仅想到传递我需要的所有东西,即使只是作为引用,即使每个参

c++ - 链接器可以报告未使用的成员函数吗? (C++)(海合会)

std::string有超过30个可以在字符串对象上调用的成员函数。如果我只使用其中的几个怎么办?我假设未使用的成员函数不会占用可执行代码部分的空间。我很想知道链接器是否有可能确定一个未使用的成员函数,将其从编译二进制文件的一部分中删除,并报告它丢弃的函数。有什么办法吗?我在看gcc'slinkerflags,但我找不到任何相关内容。 最佳答案 自std::string是一个模板类(std::string只是一个typedef到std::basic_string),只有使用过的方法会被实例化,因此不会编译任何未使用的方法,因此它们不

c++ - 在编译时捕获 std::function 分配

我只想允许在我的代码库中使用std::function,前提是它不进行任何分配。为此,我可以编写类似下面的函数,并且只用它来创建我的函数实例:templatestd::functionmakeFunction(Functorf){returnstd::function(std::allocator_arg,DummyAllocator(),f);}如果DummyAllocator在运行时被使用,它将在何处断言或抛出。理想情况下,我想在编译时捕获分配用例。即templatestd::functionmakeFunction(Functorf){static_assert(sizeneed

c++ - 转发成员函数到静态方法

上下文基本上我需要一个constvoid*const用于成员函数,因为它必须传递给第三方库(这意味着我不能使用bind、函数等)。因为这似乎是不可能的,所以我想做下一个最好的事情,将一个成员函数映射到一个静态转发方法,然后我可以获得它的指针(将this作为第一个参数传递)。问题我有很多函数需要注册,具有不同的签名,所以我想要一个很好的解决方案,允许我将成员函数的签名转换为静态方法签名(当然将this作为参数传递)-然后我可以将其转换为constvoid*const。所以基本上我想做这样的事情:所以基本上:structFoo{MyTypeBar(inta);};templatestruc