草庐IT

make_member_delegate

全部标签

c++ - 关于在包含许多子目录的项目上使用 make 的反馈

对于我的面向对象编程类(class),我必须做一个期末项目(学术目的)。我想以“正确的方式”(即:makefile、模块化、DRY、易于扩展等)制作项目,以便更好地理解类、makefile和C++。我的想法是拥有一个“树源文件结构目录”,因此在每个子文件夹中我都会得到源文件及其标题、测试文件和单个makefile。因此,如果我想在界面上工作,我会转到子文件夹界面,编辑文件,运行测试,如果一切正常,只需将对象链接到我的根目录中即可。如果我想处理我的数据结构,也是一样,依此类推。一个不错的功能是在每个子文件夹中都包含源代码和目标文件,因此我的根目录中的链接器将搜索已在子文件夹中编译的目标文

c++ - 非递归 make : include makefile segment in a loop

我有一个非递归的makefile,它定义了可用于构建库等的辅助函数definemake-library#buildlibfrom*.cppincurrentdir...endef每个库/二进制文件都在一个名为module.mk的单独makefile段中定义,该段调用这些辅助函数$(eval$(callmake-library,my_lib))makefile在源代码树中搜索makefile段,并包含它们modules:=$(shellfind.-namemodule.mk|xargsecho)include$(modules)问题:我在makefile的顶部定义了一组默认的CPPFLA

具有聚合初始化的 C++11 构造函数委托(delegate)

是否可以在我自己定义的默认构造函数中调用聚合初始化?GCC使用以下代码提示“错误:构造函数委托(delegate)给自身”:structX{intx,y,z,p,q,r;X():x{},y{},z{},p{},q{},r{}{}//cumbersome//X():X{}{}//theideaisnicebutdoesn'tcompile};我目前在ctor主体中使用memset(this,0,sizeof(*this))。 最佳答案 一种方法是通过以下方式欺骗重载决议:structX{intx,y,z,p,q,r;X(int):x{

c++ - 如何在非托管 C++ 中捕获托管异常(来自委托(delegate))?

我使用非托管C++通过Marshal::GetFunctionPointerForDelegate提供的函数指针调用托管委托(delegate)。该委托(delegate)有可能引发异常。我需要能够在我的非托管C++中正确处理此异常,以确保诸如指针清理之类的事情,并可能将异常重新抛出到更多托管代码中。调用栈类似这样:托管代码->非托管C++->通过委托(delegate)回调托管代码(此处可以抛出异常)。任何人都有正确处理这种情况的指示,以便可以清理非托管代码中的资源并将可用的异常抛出到启动整个调用堆栈的托管代码? 最佳答案 从托管

c++ - 如何从 make 文件创建 Visual Studio 解决方案?

我有一个项目的源代码和他们的make文件。我想从中创建一个VisualStudio(2005)解决方案。有什么直接的方法可以做到这一点?谁能帮帮我。我花了几个小时进行搜索,但找不到执行此操作的方法。谢谢。 最佳答案 不幸的是,Microsoft在VC++6之后删除了此功能。如果您只想从命令行或脚本构建VisualStudio项目,则可以使用devenv命令使用项目中的设置进行构建。类似于:devenv/builddebug/projectmyprojmyapp.sln从VS2010开始,C++项目将使用MSBuild系统,因此您可以

c++ - 为什么 std::make_unique 等不存在 std::initializer_list 重载?

参见ShouldIuse()or{}whenforwardingarguments?.foo是std::vector克隆。在N4140中,unique.ptr.createstd::make_unique指定为:templateunique_ptrmake_unique(Args&&...args);Remarks:ThisfunctionshallnotparticipateinoverloadresolutionunlessTisnotanarray.Returns:unique_ptr(newT(std::forward(args)...)).这意味着需要实现才能使用()而不是{

c++ - std::make_array 通用类型的基本原理

std::make_array使用普通类型。但是,我的主要问题是它允许编译原本无法编译的代码:templatevoidfoo(Ta,Tb){}intmain(){autoarr=std::experimental::make_array(1,3.0);//Compilesfoo(1,3.0);//aandbtypesmustmatchstd::arrayarr2{1,3.0};//narrowingconversion}这不一定是坏事。但是我觉得前后矛盾。请注意,由于模板参数推导的工作方式,std::make_array实际上禁用推导(因为你明确指定了一个类型)所以这不能解决问题。这里

c++ - boost 智能指针和 BOOST_NO_MEMBER_TEMPLATES

经过一番努力后,我设法获得了boostsmartpointers以在警告级别4为WindowsCE/Mobile构建。我发现消除编译错误和警告的阻力最小的方法是#defineBOOST_NO_MEMBER_TEMPLATES这到底是什么意思?我把我的灵魂卖给了魔鬼吗?当我真正使用这些类型时,一切都会变得一团糟吗? 最佳答案 本身不应该有任何不良影响,只是功能损失。成员模板是作为模板的成员函数,例如:structfoo{templatevoidi_am_not_supported_sometimes(void);};所以你不会得到未定

c++ - boost .MultiIndex : How to make an effective set intersection?

假设我们有一个data1和data2。我如何使用std::set_intersect()将它们相交?structpID{intID;unsignedintIDf;//postitioninthefilepID(intid,constunsignedintidf):ID(id),IDf(idf){}booloperator,BOOST_MULTI_INDEX_MEMBER(pID,unsignedint,IDf)>,ordered_non_unique,BOOST_MULTI_INDEX_MEMBER(pID,int,ID)>>>pID_set;ID_setdata1,data2;Loa

c++ - std::make_pair 与 C++11 统一初始值设定项

使用后者有缺点吗?std::make_pair是更通用/更兼容还是它们真的可以互换?谢谢! 最佳答案 它们有什么关系?使用初始化列表构造函数不适用于一对,因为pair是异构类型的,而初始化列表构造函数使用initializer_list,它仅可用于检索同类类型的初始化列表。(查看规范,它真的应该称为“初始化列表构造函数”,而不是“初始化列表构造函数”。你真的是指第一个吗?如果不是,你指的是什么?)。如果你只是指初始化一个std::pair使用初始化列表反对使用std::make_pair并使用auto,我觉得两者都可以。autop=