jjzjj

c++ - 如果自定义分配器中不存在重新绑定(bind),std::allocator_traits 是否定义 rebind_alloc?

我正在尝试重新绑定(bind)我的自定义分配器类型,MyAllocator,用于basic_string类,例如:std::basic_string,MyAllocator>...分配器作为MyAllocator传递给上下文,所以我需要重新绑定(bind)分配器。来自std::allocator_traits的cppreference页面,http://en.cppreference.com/w/cpp/memory/allocator_traits:Memberaliastemplates:rebind_alloc:Alloc::rebind::otherifpresent,othe

c++ - 使用 std::allocator_traits<A>

我想设计一个类模板,它采用分配器类型(如标准第17.6.3.5节中所定义)作为模板参数。我怎么看std::allocator_traits有助于填补A的任何缺失成员使用默认设置。除此之外,标准库或boost中是否有任何有助于正确使用分配器的内容?特别是:尊重类型定义,如std::allocator_traits::propagate_on_container_copy_assignment,我是否必须在每个类的特殊成员函数中检查这些东西,每个类都有一个A类型的成员??或者是否有一些包装器类型我可以用作成员来代替它来处理这些东西?如果我想通过在用户可见对象旁边存储额外数据来过度分配以减少

c++ - XCode 4.5 'tr1/type_traits' 找不到文件

我使用wxwidget库,但遇到以下问题:#ifdefined(HAVE_TYPE_TRAITS)#include#elifdefined(HAVE_TR1_TYPE_TRAITS)#ifdef__VISUALC__#include#else#include#endif#endif这里找不到#include。我使用AppleLLVM编译器4.1。(使用c++11方言)。如果我切换到LLVMGCC4.2编译器,我在那里没有错误,但主要问题是所有c++11包含都不起作用。我怎样才能使用GCC编译器,但使用c++11标准或使LLVM可以找到?如有任何帮助,我们将不胜感激。

c++ - 如何使用 type_traits 生成依赖于类特化是否存在的代码?

背景我正在尝试写一个classtemplateHasher这将以两种不同的方式实现,具体取决于是否std::hash已为T实现:templatestructHasher{std::size_thash(Tt)const;//implementasA{std::hashh;returnh(t);}//orB{std::hashh;returnh(t.to_string());}};如果std::hash已经专精了,想用。如果没有,我希望T有一个to_string()函数返回一个key供我哈希。例如,根据cppreference,如果T是longlong、指针或std::string,我想

c++ - 为什么 boost::call_traits<T>::param_type 是枚举类型的引用?

基本的C++03枚举类型只是一个具有奇特名称的整数值,因此我希望按值传递它....出于这个原因,我还期望boost::call_traits::param_type与T=SomeEnum确定最有效的传球方式T是按值(value)。从boost文档中查看CallTraits:Definesatypethatrepresentsthe"best"waytopassaparameteroftypeTtoafunction.当我使用boost::call_traits::param_type时与T=SomeEnum它确定SomeEnum应该通过引用传递。我也期待C++11classenums也

C++ : how do I use type_traits to determine if a class is trivial?

在C++0x中,我想确定一个类是否简单/是否具有标准布局,以便我可以使用memcpy()、memset()等...我应该如何使用type_traits实现下面的代码,这样我才能确认一个类型是微不足道的?templateboolisTrivialType(){boolisTrivial=???returnisTrivial;}注意:is_pod()限制太多:我希望我的类有简单的构造函数等......为了方便。补充:我认为std::is_standard_layout可能会给我我正在寻找的东西。1.如果我添加构造函数,它仍然返回true2.如果我添加一个虚方法,它返回false这是我需要确

c++ - 如何使用 type_traits 检测字符串文字?

我如何可靠地对任何不是字符串文字的内容进行static_assert?例如,在下面的代码中,我试图包装标准断言宏,但静态拒绝消息的任何不是字符串文字的内容(因为当断言触发时,除了字符串文字之外的任何内容都不会在运行时显示).#include#include#include#definemy_assert(test,message)\static_assert(\(\!std::is_pointer::value&&\!std::is_array::value\),\"literalstringrequired"\);\assert((message,(test)));intmain()

c++ - 特化 iterator_traits

我想专攻std::iterator_traits对于不具有通常的嵌套typedef(如value_type、difference_type等)的容器类模板的迭代器,我不应该修改其源代码。基本上我想做这样的事情:templatestructiterator_traits::iterator>{typedefTvalue_type;//etc.};除了这不起作用,因为编译器无法推断出T来自Container::iterator.有什么可行的方法可以达到同样的目的吗?例如:templateclassSomeContainerFromAThirdPartyLib{typedefTValueTy

c++ - 错误 C2248 : 'std::basic_ios<_Elem,_Traits>::basic_ios' : cannot access private member declared in class 'std::basic_ios<_Elem,_Traits>'

收到此错误,我很确定它在operatorvoidCRational::print()const{print(cout);}voidCRational::print(ostream&sout)const{if(m_denominator==1)cout 最佳答案 您需要通过引用而不是值返回ostream。它试图调用构造函数。也可以传递'a'作为引用:ostream&operator我还注意到打印方法可能是错误的。它有sout作为流的名称传递,但随后直接使用cout实现。应该是voidCRational::print(ostream&s

c++ - C++11 <type_traits> 模板参数类型推导失败

我正在尝试了解如何使用C++(11).这是我的简单测试程序#includetemplateinlineUadd(typenamestd::enable_if::value,U>::typea,typenamestd::enable_if::value,S>::typeb){returna+b;}intmain(intargc,constchar*argv[],constchar*envp[]){unsignedintui;inti;autoa=add(ui,i);return0;}当使用GCC4.8.1编译时,它会出错/home/per/f.cpp:Infunction‘intmain