草庐IT

make_new_type

全部标签

深入理解C#泛型:new与where关键字全解析

C#泛型中new和where是重要的关键字,它们都可以用于约束泛型类型参数的限制;它们都用于提高代码的安全性和可用性,它们的作用在很大程度上提高了代码的可读性和可维护性。在这篇文章中,我们将一起了解泛型中的new和where,以及它们之间的区别。1.new关键字在C#泛型中,new关键字被用于指定泛型类型参数必须具有公共的无参数构造函数。使用new关键字指定泛型类型参数需要有无参数构造函数时,可以保证我们在使用泛型类型参数来创建实例时不会发生运行时错误。如果我们使用了没有公共无参数构造函数的泛型类型参数,就会在运行时抛出异常。使用示例:classItemFactorywhereT:new(){

c++ - 有没有比 allocator_type 更好的方法来区分可调整大小的容器?

我有operator>>()的模板重载,我需要区分可以调整大小的容器(例如vector)和不能调整大小的容器(例如,数组。我目前只是在使用allocator_type特征(见下面的代码)——它工作得很好——但想知道是否有更明确的测试方法。templatestructis_resizable{typedefuint8_tyes;typedefuint16_tno;templatestaticyestest(classU::allocator_type*);templatestaticnotest(...);staticconstboolvalue=sizeoftest(0)==sizeo

c++ - "unresolved overloaded function type"在 std::function 中有静态函数

尝试将重载静态函数传递给std::function时出现“未解析的重载函数类型”错误。我知道类似的问题,例如this和this.然而,即使那里的答案可以将正确函数的地址放入函数指针中,它们也会因std::function而失败。这是我的MWE:#include#include#includestructClassA{staticstd::stringDoCompress(conststd::string&s){returns;}staticstd::stringDoCompress(constchar*c,size_ts){returnstd::string(c,s);}};voidh

c++ - C++ "type deduction"和 Haskell "type inference"有什么区别?

在英语语义中,“typededuction”等于“typeinferring”吗?我不确定这只是不同语言设计者选择的成语偏好,或者计算机科学给出了严格的“类型推导”定义,哪个不是“类型推断”?谢谢。 最佳答案 C++规范和工作草案广泛使用“类型推导”来指代没有类型声明作为引用的表达式类型;例如thisworkingdraftonconcepts在谈论auto声明的变量时使用它,我记得很多书在谈论模板时都使用它,那时候我不得不学习——然后忘记了大部分——C++。Typeinference但是,它有自己的维基百科页面,也是编程语言理论中

c++ - 如何在 C++ 中为不同的迭代器 value_types 重载函数

我想在C++11中实现一个带有一对迭代器的模板函数。如果传递了一对迭代器,其值类型是任意类型的std::pair,则实现应该做一些特殊处理。我试图提出以下定义://arbitraryvaluetypestemplatevoidprocess(Iterbegin,Iterend){for(Iteriter=begin;iter!=end;++iter){std::cout::value_type,std::pair>::value>::type*=0>voidprocess(Iterbegin,Iterend){for(Iteriter=begin;iter!=end;++iter){s

c++ - `type *var = (int)0` ,合法与否?

下面的例子:char*var=(int)0;在gcc和cl.exe上编译,但在clang中导致错误:cannotinitializeavariableoftype'char*'withanrvalueoftype'int'谁是正确的?对于它的值(value),C++11说(强调我的)4.10/1Anullpointerconstantisanintegralconstantexpression(5.19)prvalueofintegertypethatevaluatestozerooraprvalueoftypestd::nullptr_t.Anullpointerconstantca

c++ - 什么是智能指针管理的资源,而它们的内存不是new分配的?

我继续在C++Primer5th中看到与“动态内存”相反的“资源”:Bydefault,apointerusedtoinitializeasmartpointermustpointtodynamicmemorybecause,bydefault,smartpointersusedeletetofreetheassociatedobject.Wecanbindsmartpointerstopointerstootherkindsofresources.However,todoso,wemustsupplyourownoperationtouseinplaceofdelete.Ifyouu

c++ - 如何在 Linux 中重新定义 malloc() 以便在 C++ 中使用 new

我有一个为我定义的mem_malloc()和mem_free(),我想用它们来替换malloc()和free(),从而替换C++的new和delete。我定义它们如下:extern"C"{externvoid*mem_malloc(size_t);externvoidmem_free(void*);void*malloc(size_tsize){returnmem_malloc(size);}voidfree(void*memory){mem_free(memory);}}但是,我收到两个链接错误:[user@machinetest]$g++-m32-pthreadmain.cpp-s

c++ - #include <string> 在 header 中定义了一些结构。错误 : string does not define a type

#ifndefSTRCUTS_H#defineSTRCUTS_H#includestructmenuEntry{stringitemID;//'string'doesnotnameatypestringitemName;//'string'doesnotnameatype};#endif当我将#include放在header保护上方时,我得到了同样的错误。想一想,我以前在将结构定义放在标题中时遇到过奇怪的麻烦。一定是我没有得到的东西。 最佳答案 您需要将string更改为std::string,即#ifndefSTRCUTS_H#d

c++ - 在没有new的情况下在堆上创建一个对象

在C++中,是否可以在不使用new或malloc的情况下在堆上创建对象?我认为如果我使用像vector这样的STL容器,它将被放在堆上。如果我这样做:vectorlistObjs=vector();Objectx=Object(...);...listObjs.push_back(x);此处创建的对象位于何处? 最佳答案 x表示的对象驻留在堆栈中。vector::push_back会将其复制到堆中。allocatorvector中的对象可能会使用new或malloc来实现,尽管它可能使用另一个低级API。例如,Unix和Window