C
:
struct node {
int data;
int key;
struct node *next;
};
上述 C
数据结构只能包含设置的数据类型,即int data
和int key
。
Java
:
List<?> objectList = new ArrayList<>();
如何创建包含动态设置数据类型的 C
LinkedList
?
这个想法是:
struct node {
<?> data;
<?> key;
struct node *next;
};
所以我可以这样做:
List<String> objectList = new ArrayList<>();
或
List<MyCustomObject> objectList = new ArrayList<>();
C 中的
struct node {
<String> data;
<String> key;
struct node *next;
};
或
struct node {
<MyCustomObject> data;
<MyCustomObject> key;
struct node *next;
};
答案 0 :(得分:3)
数据应为void *
。然后,您需要将其隐式地转换为它需要的任何指针类型。
答案 1 :(得分:3)
你不能,因为动态data types不存在一般在C 中。通过阅读C11标准n1570进行检查。
你可能会做的是实现某种tagged union type,并创建一个包含这些的列表(或者可能是包含一些指针的列表,但你需要决定一些{ {3}}策略和相关的编码约定。)
如何实现这种标记的联合类型是不同的问题。如需灵感,请查看Glib memory management类型(但还有其他方法可以做到这一点;一个示例是Python值类型,请在GVariant章节中详细了解它;或者某些<nav class="navbar navbar-expand navbar-light bg-faded">
<a class="navbar-brand" href="#">Learning Bootstrap 4</a>
<ul class="nav navbar-nav">
<li class="nav-item active">
<a class="nav-link" href="index.html">Home</a>
</li>
<li class="nav-item">
<a class="nav-link" href="about.html">About</a>
</li>
<li class="nav-item">
<a class="nav-link" href="contact.html">Contact</a>
</li>
</ul>
<form class="form-inline pull-xs-right">
<input class="form-control" type="text" placeholder="Search">
<button class="btn btn-primary" type="submit">Search</button>
</form>
</nav>
包含一些struct
,或union
union
struct
union
,所有struct
都以共同的歧视字段开头,或指向此int
的某些long
等,并进行研究Glib中该实现的extending Python,source code。
你也可以考虑一些free software方法,例如从您的数据类型的某些描述生成一些C代码。查看metaprogramming或SWIG获取灵感。
BTW,RPCGEN标题主要库使用大量SGLIB技术(使用巨大的C宏)来提供&#34;泛型&#34;容器还要了解C实现的preprocessor和ABI。在某些情况下,它可能有助于理解它(例如,如果您决定使用calling conventions)。请注意,许多基本C类型(char
,@Entity
public class Schedule {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
@ManyToOne
@JoinColumn(name = "usergroup_id")
private UserGroup userGroup;
private String description;
private boolean master;//is this a schedule for all supervalus(true) or one supervalu(false)
@OneToMany(mappedBy = "schedule",cascade = CascadeType.ALL)
private List<DateActiveScheduleItem> dateActiveScheduleItems = new ArrayList<>();
@OneToMany(mappedBy = "schedule",cascade = CascadeType.PERSIST)
private List<MusicScheduleItem> musicScheduleItems = new ArrayList<>();
@OneToMany(mappedBy = "schedule",cascade = CascadeType.PERSIST)
private List<AdvertisementScheduleItem> advertisementScheduleItems = new ArrayList<>();
@Basic
@Temporal(TemporalType.DATE)
private java.util.Date dateAdded;
public Long getId() {
return id;
//getters setters
}
,@Entity
public class DateActiveScheduleItem {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Basic
@Temporal(TemporalType.DATE)
private Date date;
@JsonIgnore
@ManyToOne
@JoinColumn(name = "schedule_id")
private Schedule schedule;
//getters setters}
,数据tagged pointers,pointers)具有截然不同的表示形式(不同大小,不同{{3 ,不同的方式作为参数传递并作为结果返回 - 例如在各种function pointers或alignments上),甚至可能不同processor registers(想到call stack其中函数指针与数据位于不同的空间,甚至可能具有与数据指针不同的大小。