草庐IT

make_printable

全部标签

c++ - std::make_pair、c++11 和显式模板参数

这个问题在这里已经有了答案:C++11make_pairwithspecifiedtemplateparametersdoesn'tcompile(1个回答)关闭7年前。重新编辑:首先,这只是一个好奇的问题,我知道,std::pair或许多其他解决方案可以根除这个问题。你能告诉我,下面这个问题的背后究竟是什么吗?此代码是一个在c++03上运行但在c++11上失败的简单示例。std::pairgetsth(int*param){returnstd::make_pair(param,0);}intmain(intargc,char*argv[]){int*a=newint(1);std::

c++ - 如何在 Visual Studio 中解决 make_shared 的 10 个限制

在一些旧代码上使用C++10的新功能时,我遇到了无法调用带有12个参数的make_shared的问题。我记得Microsoft的STL谈到他们如何为make_shared使用仿真,并且10是最大值。显然仅仅为此重构代码是不可能的,所以基本上我的问题是-有没有办法在VS2010中为make_shared获取超过10个参数。 最佳答案 make_shared(1,2,3,4,5,6,7,8,9,10,11,12);可以替换为shared_ptr(newfoobar(1,2,3,4,5,6,7,8,9,10,11,12));在C++11中

c++ - make_pair 是在栈上还是堆上?

如果我从不同的范围将它插入到map中,是否需要分配一对?#include#include#include#includeusingnamespacestd;voidparseInput(intargc,char*argv[],unordered_map*inputs);intmain(intargc,char*argv[]){unordered_map*inputs=newunordered_map;parseInput(argc,argv,inputs);for(auto&it:*inputs){cout*inputs){inti;for(i=1;iinsert(make_pair(

c++ - Visual Studio 2010 中 std::make_shared() 的友元函数(不是 Boost)

如何创建std::make_shared()的友元函数。我试过:classMyClass{public:friendstd::shared_ptrstd::make_shared();//or//friendstd::shared_ptrstd::make_shared();protected:MyClass();};但它不起作用(我使用的是VisualStudio2010SP1) 最佳答案 如何向您的类添加一个静态方法:classFoo{public:staticshared_ptrcreate(){returnstd::shar

c++ - 特化 std::make_shared

我有一个具有严格对齐要求(由于使用了AVX操作)的类型,它大于平台默认对齐方式。为了简化此类的使用,我想专门化std::make_shared以始终为该类型使用合适的分配器。像这样:namespacestd{templateinlineautomake_shared(Args&&...args){returnstd::allocate_shared(allocator_type,std::forward(args)...);}}我的问题是,标准允许这样做吗?它会按预期工作吗? 最佳答案 来自N4140[namespace.std]/

c++ - 为什么不允许使用 `make_unique<T[N]>`?

假设命名空间std贯穿始终。C++14委员会草案N3690定义了std::make_unique因此:[n3690:20.9.1.4]:unique_ptrcreation   [unique.ptr.create]templateunique_ptrmake_unique(Args&&...args);1Remarks:ThisfunctionshallnotparticipateinoverloadresolutionunlessTisnotanarray.2Returns:unique_ptr(newT(std::forward(args)...)).templateunique

c++ - 为什么此生成文件适用于 make 3.81 而不是 3.82?

我有一个非常简单的makefile来构建一个静态库,多年来它在GNUmake版本3.81上运行良好,但在版本3.82上运行失败。我已经阅读了有关向后兼容性的问题,但这些问题似乎并不适用。我还检查了这里的几个帖子,例如MakefileSyntax:Staticlibrarylib$(library).a($objects)和Makefile-tocreateastaticlibrary,但找不到解决方案。这是我的生成文件:FILES=file1.ccfile2.ccfile3.ccOBJ_FILES=$(FILES:.cc=.o)libname.a:libname.a($(OBJ_FIL

c++ - boost::make_shared 导致访问冲突

我有一个用于ARMV4IWindowsMobile6的VisualStudio2008C++应用程序,我正在使用boost::shared_ptr管理一个相当大的对象(4KB)。不幸的是,boost::make_shared导致访问冲突异常。我的代码:structFoo{chara[4*1024-1];};int_tmain(intargc,_TCHAR*argv[]){boost::shared_ptrf=boost::make_shared();//AccessViolationreturn0;}异常调用栈:test.exe!boost::detail::sp_ms_deleter

C++ make_shared 不可用

虽然我有std::tr1::shared_ptr在我的编译器中可用,我不有make_shared.谁能告诉我如何正确实现make_shared?我懂了我需要使用可变参数来为T的构造函数提供参数。但我的编译器中也没有可用的可变参数模板。 最佳答案 如果您的编译器不提供make_shared的实现并且您不能使用boost,并且您不介意缺少针对对象和引用计数器的单一分配优化,那么make_shared是这样的:不支持可变参数模板://zeroargumentsversiontemplateinlineshared_ptrmake_shar

c++ - 如何创建boost phoenix make_shared?

是否可以创建std::make_shared的boostphoenix惰性变体?我的意思是,让类似的事情成为可能namespacep=boost::phoenix;...expr=custom_parser[_a=p::make_shared(_1,_2,_3)]>>...由于std::make_shared的可变模板性质,不能使用BOOST_PHOENIX_ADAPT_FUNCTION。所以,如果可能的话,包装器应该是可变参数模板本身。 最佳答案 如果你能省下一组额外的括号:namespace{templatestructmake