草庐IT

non-struct

全部标签

c++ - C/C++ : switch for non-integers

很多时候我需要根据一个非POD常量元素的值来选择做什么,像这样:switch(str){case"foo":...case"bar":...default:...}遗憾的是switch只能与整数一起使用:错误:开关量不是整数。实现这样的事情最简单的方法是拥有一个ifs序列:if(str=="foo")...elseif(str=="bar")...else...但是这个解决方案看起来很脏,应该花费O(n),其中n是案例的数量,而在最坏的情况下,使用二分搜索,这段代码可能花费O(logn)。使用一些数据结构(如Maps)可以获得一个表示字符串的整数(O(logn)),然后使用O(1)sw

c++ - "anonymous structs"是标准的吗?而且,真的,他们*是*什么?

MSDNreckons匿名结构在C++中是非标准的:AMicrosoftCextensionallowsyoutodeclareastructurevariablewithinanotherstructurewithoutgivingitaname.Thesenestedstructuresarecalledanonymousstructures.C++doesnotallowanonymousstructures.Youcanaccessthemembersofananonymousstructureasiftheyweremembersinthecontainingstructur

c++ - `struct X typedef` 与 `typedef struct X` 的含义是什么?

我在现有代码库中有以下(工作)代码,用于在C和C++之间共享的包含文件,在MSVC(2010)和WindowsDDK上编译:structX{USHORTx;}typedefX,*PX;还有:enumMY_ENUM{enum_item_1,enum_item_2}typedefMY_ENUM;据我所知,正确的定义应该是这样的:typedefstruct{USHORTx;}X,*PX;下面的表格有什么目的吗?我错过了什么吗? 最佳答案 事实上,typedef和typedef是否有效只是来自语言语法定义。typedef被归类为存储类说明符

c++ - 为什么没有 std::is_struct 类型特征?

我已经看到,为了检查类型T是否是我可以使用的类:boolisClass=std::is_class::value;它对类和结构都返回true。我知道在C++中它们几乎是一回事,但我想知道为什么它们在类型特征上没有区别。检查这个差异总是没用,还是有更多我不明白的原因? 最佳答案 Itreturnstrueforbothclassesandstructs.IknowthatinC++theyarealmostthesamething,butI'dliketoknowwhythere'snotadistinctionbetweenthem

c++ - GNU 编译器警告 "class has virtual functions but non-virtual destructor"

我在C++中定义了一个接口(interface),即一个只包含纯虚函数的类。我想明确禁止接口(interface)的用户通过指向接口(interface)的指针删除对象,所以我为接口(interface)声明了一个protected非虚拟析构函数,类似于:classITest{public:virtualvoiddoSomething()=0;protected:~ITest(){}};voidsomeFunction(ITest*test){test->doSomething();//ok//deletingobjectisnotallowed//deletetest;}GNU编译器

go - Go 中的 new(Struct) 和 &Struct{} 有什么区别?

它们似乎是一样的:packagemainimport"fmt"typeSstruct{iint}funcmain(){vars1*S=new(S)fmt.Println(s1)vars2*S=&S{}fmt.Println(s2)//Printsthesamething.}更新:嗯。我刚刚意识到没有明显的方法可以使用new初始化S.i。有没有办法做到这一点?new(S{i:1})似乎不起作用:/ 最佳答案 来自EffectiveGo:Asalimitingcase,ifacompositeliteralcontainsnofield

go - 向 chan 发送了一个 nil 指针,但收到了 "non-nil"

packagemainimport("fmt""os/exec")funcmain(){errChan:=make(chanerror)gofunc(){vare*exec.Error=nilerrChan输出很奇怪:err!=nil,buterr=在这里试试:http://play.golang.org/p/_iyh0m7O1a 最佳答案 问题在于作为错误接口(interface)传入channel的值不是nil,而是一个指向nil的exec.Error指针。如果您进行更改,程序将正常运行:gofunc(){vare*exec.E

sql - 为什么在 gorm 等 go 库中使用 struct 中的 sql 标签?

我知道golang中struct中标签的必要性,以及golang中的反射如何访问它。但是我已经搜索并找不到可靠的答案来回答为什么在为sql结果编写struct时应该在struct中使用sql标签。我探索了许多示例代码,人们在结构中使用sql:"index"并在结构中使用sql:"primary_key"。现在我已经在数据库层做了索引,还不够吗?我是否也必须使用sql:"index"才能获得最佳结果?像这样我已经在数据库中定义了主键属性,我应该也指定sql:"primary_key"吗?没有这些,我的代码似乎可以正常工作。只是想知道它们的好处和用途。 最佳答案

struct - 如何导入其他包内的结构?

我尝试学习Go,但我经常感到沮丧,因为其他语言的一些基本功能似乎在Go中不起作用。所以基本上,我想使用结构类型在其他文件中定义。我能够使用结构类型以外的函数。在main.go中,packagemainimport("list")funcmain(){lst:=list.NewList(false)lst.Insert(5)lst.Insert(7)lst.InsertAt(2,1)lst.PrintList()}正如我所期望的(列表在$GOPATH中),这完美地工作(以及所有其他功能)。在包列表中,我定义结构如下:typeLinkedListstruct{head*nodesizein

pointers - Golang 反射 : Can't set fields of interface wrapping a struct

我正在尝试实现一种方法,该方法可以更改可以具有任意结构的对象中的字段值。当我有指向结构的指针时,字段的遍历没有问题。但是,当我有一个不包含指向结构的指针而是结构本身的接口(interface)时,我无法更改字段,简而言之://Thefollowingdoesn'tworkvarxinterface{}=A{Str:"Hello"}//Thispanics:reflect:callofreflect.Value.FieldonptrValuereflect.ValueOf(&x).Field(0).SetString("Bye")//Thispanics:reflect:callofre