草庐IT

smart_listing

全部标签

c++ - List<Char> 在 C++ 中键入 constexpr 字符串

我正在尝试模仿cons-cell就像函数式编程语言中的列表结构,在C++中使用constexpr.我有一个pair类型,开始。这是两个不同事物的持有者,但也支持嵌套对。这是代码。templatestructpair{constexprpair():_car{E1{}},_cdr{E2{}}{}constexprpair(constE1&car,constE2&cdr):_car{car},_cdr{cdr}{}constexprautocar()const{return_car;}constexprautocdr()const{return_cdr;}friendstd::ostrea

c++ - 用于初始化多维数组的嵌套 initializer_list

出于某些原因,我必须在C++中实现一个多维数组类。有问题的数组是这样的:template>>classArrayfinal{private:std::vectorshape_;std::vectordata_;public://Somepublicmethods}T是存储在数组中的元素类型,并且数组的维度不是模板化的,因为用户应该能够reshape数组,例如:Arrayarray=Array::zeros(3,2,4);array.reshape(4,6);虽然上面提到的功能实现的很顺利,但是我卡在实现这个类的“开始”,就是初始化数组...我的问题如下:是否有任何方法可以拥有这样的构造

c++ - std::list 中的 max_size() 函数如何计算最大尺寸?

在std::list中,max_size()函数中的最大大小是如何计算的?现在我意识到这取决于实现,但假设我是制作标准库的人。我将如何确定可移植的特定类型T的list的最大限制? 最佳答案 它几乎总是N的最大值,其中容器最多可以有N个元素。这几乎总是意味着所讨论平台上无符号整数类型的最大值除以要存储在容器中的元素类型的大小。 关于c++-std::list中的max_size()函数如何计算最大尺寸?,我们在StackOverflow上找到一个类似的问题: h

c++ - 为什么 std::list 想不带参数调用我的分配器?

抱歉,我不能贴出具体的代码。我希望这个小样本就足够了:假设我有一个这样的分配器:templateclassMyAllocator{//...typedefsMyAllocObject_allocObject;public:MyAllocator(){//_allocObject=new..}MyAllocator(constMyAllocator&alloc){_allocObject=alloc.getAllocObject();}templateMyAllocator(constMyAllocator&alloc){_allocObject=alloc.getAllocObject

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++ - 使用可变参数模板制作类似元组的编译时 "linked-list"

我在考虑std::tuple的可能实现方式(以及任何类似的模板类,在编译时定义了可变数量的“成员”),我认为也许可以创建一个类似于链表的“递归类型”。我尝试编译以下测试用例:templateclassTupleLite{public:FirstTypetype_;TupleLiteother_types_;};intmain(){TupleLitemytuple;}类本身编译没有错误,但实例化抛出错误wrongnumberoftemplatearguments(0,shouldbe1ormore).我相信这是因为TupleLite尝试实例化TupleLite,它试图实例化一个Tuple

C++ 构造函数采用大小为 1 的 std::initializer_list

下面的示例程序代码背后的想法是说明这样一个事实,即当只给定一个元素时,拥有一个不等同于默认复制构造函数的初始化列表构造函数可能会导致Clang以某种方式出现意想不到的结果。它还表明Clang和GCC没有在复制构造函数和初始化列表构造函数之间实现相同的优先级,这实际上使得可移植代码不可能使用这种初始化列表构造函数。//Includedirective.#include//Thestructusedinthiscase.structFoo{//Membervalue.intval;//Defaultconstructor.Foo():val(0){}//Initializerlistcon

c++ - 用于 std::list 和 std::map 的 Visual C++11 堆栈分配器

我想提高list和map的特定用法的性能,其中项目的数量有大约100000的硬限制。在这种情况下,STL默认分配器显然不是最佳选择,因为清理所有数千个小对象需要很长时间(>10秒!)。更不用说所有其他潜在问题。很明显,为了改进这一点,我可以预先分配正确数量的内存以包含所有列表/map节点。到目前为止,我已经能够实现默认分配器的工作版本(通过从std::allocator_traits派生),它为每个节点使用alloc/free。但我正在努力找出如何修改它以允许“有状态”使用,例如,我非常简单的堆栈:usingnamespacestd;classMemPoolStack{public:s

c++ - 函数模板推导和initlializer_list

我有以下函数模板:templatevoidf(std::initializer_list>il){//...}我调用函数如下:f({std::pair(1,2),std::pair(3,4)});//(a)而且效果很好。但是,如果我尝试按如下方式调用它:f({{1,2},{3,4}});//(b)它无法推断出正确的类型,我得到了一个编译错误:'nomatchingfunctionforcallto'f()notecandidateis:note:templatevoidf(std::initializer_list>)'如果我这样调用它:f({std::pair(1,2),{3,4}}

c++ - Uniform Initialization with curly brace 被误认为是 Initializer List

我有一个类:#includeclassObject{std::shared_ptrobject_ptr;public:Object(){}templateObject(T&&object):object_ptr{newT{std::move(object)}}{}virtual~Object(){};};我的主要cpp文件是:#include#include"Object.hpp"classFoo{};intmain(){Objecto{Foo{}};}它给我错误:test/test.cpp:13:20:requiredfromhereinclude/Object.hpp:24:49: