草庐IT

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

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

c++ - 将 boost::shared_ptr 与重载下标运算符 ([]) 的类一起使用

我有一个重载下标运算符的类:classSomeClass{public:int&operator[](constintidx){returnsomeArray[idx];}private:intsomeArray[10];};这当然允许我像这样访问someArray成员的数组元素:SomeClassc;intx=c[0];然而,一些SomeClass的实例将被包裹在一个boost共享指针中:boost::shared_ptrp(newSomeClass);但是,为了使用下标运算符,我必须使用更冗长的语法,这种语法破坏了下标运算符重载的简洁性:intx=p->operator[](0);

c++ - 使用 pimpl 的类移动不会编译

在下面的例子中,怎么可能正确调用了~CImpl,但是当需要移动类时,编译器却说它有一个不完整的类型?如果将Impl的声明移动到header,它会起作用,我的问题是为什么析构函数被调用得很好,所以看起来类型不完整,但移动时出现问题。文件:C.hpp#includeclassImpl;classC{public:C();~C();C(C&&)=default;C&operator=(C&&)=default;std::unique_ptrp;};文件C.cpp#include"C.hpp"#includeusingnamespacestd;classImpl{public:Impl(){}

c++ - 在基于策略的类中保留构造的隐性

考虑一个基于策略的智能指针类Ptr只有一个策略可以防止在NULL状态下(以某种方式)取消引用它。让我们考虑2个此类策略:NotNullNoChecking自NotNull政策更具限制性,我们希望允许从Ptr进行隐式转换至Ptr,但不是相反的方向。为了安全起见,那一个必须是明确的。请查看以下实现:#include#include#includestructNoChecking;structNotNull;structNoChecking{NoChecking()=default;NoChecking(constNoChecking&)=default;explicitNoChecking

c# - 将代码添加到 SWIG 中自动生成的类

我正在尝试找到一种方法来将代码添加到swig生成的函数中。我已经使用类型映射来扩展类,但在文档中找不到任何关于扩展特定功能的内容。给定以下swig接口(interface)文件:%moduleTest%{#include"example.h"%}%typemap(cscode)Example%{bool64bit=SizeOf(typeof(System.IntPtr))==8;staticstringPath=64bit?"/...Pathto64bitdll.../":"/...Pathto32bitdll.../";%}%include"example.h"我得到以下C#代码:p

c++ - noexcept 一个函数返回一个具有抛出析构函数的类

在下面的代码中,我认为断言不应该触发,但它确实触发了。structA{~A()noexcept(false);};Af()noexcept;intmain(){static_assert(noexcept(f()),"fmustbenoexcept");}函数f()显然是noexcept,但是noexcept(f())被评估为false。(在gcc和clang中)我是不是遗漏了什么或者是错误? 最佳答案 表达式e上的noexcept运算符告诉您表达式的潜在异常集是否为空。根据[except.spec]/(13.2),此集合包含析构函

c++ - 如何设计一个可序列化的类,使得任何非序列化的属性都会导致编译时错误?

假设您有以下代码:classA{bool_attribute1;};//Arbitrarilyusingstd::string,notthepointofthisquestionstd::stringserialize(constA&);现在开发者在classA中添加了一个新的bool_attribute2,忘记更新serialize函数,导致运行时出现bug.(已经去过那里了吗?)有没有办法把这个问题变成编译时错误?由于C++不支持反射,我觉得这是不可能的,但我可能遗漏了一些东西。 最佳答案 如果您使用的是c++1z,则可以使用结

c++ - 将 Delphi 类传递给需要具有 __thiscall 方法的类的 C++ 函数/方法

我有一些MSVC++编译的DLL,我为其创建了类COM(精简版)接口(interface)(抽象Delphi类)。其中一些类具有需要指向对象的指针的方法。这些C++方法是使用__thiscall调用约定(我无法更改)声明的,这与__stdcall类似,只是传递了一个this指针在ECX寄存器上。我在Delphi中创建类实例,然后将其传递给C++方法。我可以在Delphi中设置断点,并看到它命中了我的Delphi类中公开的__stdcall方法,但很快我得到一个STATUS_STACK_BUFFER_OVERRUN并且应用程序必须退出。是否可以在Delphi方面模拟/处理__thisca

c++ - 拥有一个 ref 类型的类成员的目的是什么?

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭11年前。我有这段代码,但它不是一个实际的例子。例如classAnimal{inti;int&ref;public:Animal():ref(i){}};任何人都可以提供一个现实生活中需要ref作为类(class)成员的例子,以便我更好地理解它吗?

c++ - 从包含的类调用容器类中定义的回调函数的推荐方法是什么?

假设您有一个如下所示的类层次结构:classRobot{public:voidOnTaskCompleted(){}private:Task*m_pTask;};classTask{public:virtualvoidDoTask()=0;};classTidyUp:publicTask{public:voidDoTask(){//WhenTidyUptaskiscompeletedinvokeOnTaskCompleted()fromhere.}};我需要从TidyUp::DoTask()调用OnTaskCompleted()。推荐的方法是什么?我想避免:使OnTaskComplet