草庐IT

make_obj

全部标签

c++ - std::make_unique<T[]>(size) 值初始化

是std::make_unique(1000)总是值初始化元素?好吧,我研究了实现,clang以及g++都在使用newT[size]()进行值初始化。但我找不到符合C++14/17标准的实现必须这样做。 最佳答案 如果标准库符合C++14,那么是的,它必须这样做(使用newT[size])。来自C++14§20.8.1.4[unique.ptr.create]/4:templateunique_ptrmake_unique(size_tn);Returns:unique_ptr(newremove_extent_t[n]()).

c++ - 我可以将 boost::make_shared 与私有(private)构造函数一起使用吗?

考虑以下几点:classDirectoryIterator;namespacedetail{classFileDataProxy;classDirectoryIteratorImpl{friendclassDirectoryIterator;friendclassFileDataProxy;WIN32_FIND_DATAWcurrentData;HANDLEhFind;std::wstringroot;DirectoryIteratorImpl();explicitDirectoryIteratorImpl(conststd::wstring&pathSpec);voidincreme

c++ - 带有容器和默认分配器的模板模板参数 : can I make my declaration more compact?

我在看这个有趣的话题:https://stackoverflow.com/a/16596463/2436175我的具体案例涉及使用来自opencv的cv::Point_和cv::Rect_的标准容器声明模板函数。我想针对以下模板:我将使用的标准容器类型完成cv::Point_和cv::Rect_定义的基本数据类型我最终做出了以下声明:templateclassContainer_t>voidCreateRects(constContainer_t,std::allocator>>&points,constTvalue,Container_t,std::allocator>>&rects

c++ - 使用 C++11 时扩展命名空间 std 以实现 make_unique

我遇到了一个固定在C++11功能上但实现了std::make_unique的代码库。如果不使用C++14,则扩展namespacestd以添加功能,即围绕实现包装#ifdefined(__cplusplus)&&__cplusplus我知道那是undefinedbehaviortoextendnamespacestd(有一些异常(exception))。上述情况仍然可以接受还是应该避免? 最佳答案 不,这是被禁止的——尽管,通过#definemake_unique???符合标准的C++11程序可以非常确定库从不提及名称(在字符串化之

c++ - .lib 和 .obj 彼此之间以及我在 C++ 中的项目之间的关系是什么?

.lib和.obj文件如何相互关联?他们的目的是什么?.lib只是.obj文件的集合吗?如果是这样,那么.obj是否存储在.lib中,从而使.obj变得不必要? 最佳答案 通常,.obj文件指的是目标文件。这是已编译形式的源文件。例如,main.cpp和foo.cpp将生成main.obj和foo.obj。然后链接器将它们链接在一起,这样main.obj就可以访问foo.obj中定义的函数,反之亦然。链接器将输出你的二进制文件,即.lib(或.a,或.exe,或.dll``等).因此,从广义上讲,是的,二进制输出(在您的情况下为.l

C++11 传递 'this' 作为 std::make_shared 的参数

我正在尝试使用std::make_shared将“this”传递给构造函数例子://headersclassA{public:std::shared_ptrcreateB();}classB{private:std::shared_ptra;public:B(std::shared_ptr);}//sourcestd::shared_ptrA::createB(){autob=std::make_shared(this);//Compilererror(VS11Beta)autob=std::make_shared(std::shared_ptr(this));//Nocompiler

c++ - 如何将 .obj 文件包含到项目中

我有以下问题:我被赋予了任务——构建一个应用程序。有一个现成的文件counter.h和一些其他文件-counter.obj。事实证明,在counter.h中只有函数声明-如何将.obj文件包含到.cpp文件中以便编译?我正在使用MicrosoftVisualStudio2010-文件本身应该放在哪个文件夹中? 最佳答案 将obj文件添加到解决方案中,就像您对cpp文件所做的那样(我通常通过拖放来完成此操作,即将文件从Windows资源管理器中拖放到项目中解决方案资源管理器窗口)。您可以将obj文件与cpp文件放在一起;这并不重要。

c++ - 使用 std::make_shared 抽象类实例化时出错

我将省略相当多的代码,因为这些是一些相当大的对象,而我的问题实际上只涉及std::make_shared的操作。我在名为D3D11Shader的命名空间SYNC中有一个对象。这有一个名为static的函数,SYNC::D3D11Shader*SYNC::D3D11Shader::CreateInstance(conststd::string&s)它将采用字符串索引并返回指向从SYNC::D3D11Shader派生的着色器实例的指针。有一次我开始使用智能指针在包含所有这些着色器的vector中自动重新分配它们。然而,当我去做这件事时,std::shared_ptrshaderPtr;//

c++ - make 失败,返回错误 "cannot convert ‘std::istream {aka std::basic_istream<char>}’ 到 ‘bool’”

我正在尝试从源代码编译libgtextutils(fastxtoolkit需要)。“./configure”命令运行良好,但随后的“make”命令产生了一个我无法解决的错误。text_line_reader.cpp:Inmemberfunction‘boolTextLineReader::next_line()’:text_line_reader.cpp:47:9:error:cannotconvert‘std::istream{akastd::basic_istream}’to‘bool’inreturnreturninput_stream;^~~~~~~~~~~~make[3]:*

c++ - 在波前对象文件 (.obj) 中,我应该如何在 opengl 中渲染具有 4 个以上顶点的面?

所以使用Wavefrontobjectfile我应该如何在OpenGL中渲染具有4个以上顶点的面?我知道如果它有3个顶点我使用GL_TRIANGLES,如果它有4个我使用GL_QUADS,但如果它有5个或更多,我应该怎么办利用?有标准吗? 最佳答案 首先,您应该告诉任何导出工具不要导出具有那么多顶点的面。面应该有3个顶点,句点。如果您的导出工具无法做到这一点,那么您的加载工具应该将多边形分解为3个顶点面。我相当确定theAssetImporterlibrary可以做到这一点。 关于c++