当类型已知时,如何从void指针返回带有类型的指针

时间:2013-01-23 15:26:51

标签: c types void-pointers

我目前正在创建一个小型库,可以访问random.org并获取随机字符串或整数。我现在遇到了一个小问题,但设计明智,我无法确定哪两种方法最好,所以我会写下我对两者的看法,并提出我认为与两者相关的问题

我目前有这样的结构:

typedef struct {
char **array;
size_t row;
size_t col;
size_t size; 
} MemoryStruct;

这是我的“问题”的根源,因为我现在已经将整数处理添加到我的库中。

可以看出,指针当前是一个char指针,因为我希望能够处理污点整数和字符,我应该添加另一个指针 - 一个整数指针 - 或者我应该改为使它成为一个无效指针并创建一个将返回正确类型指针的函数?

在另外一个整数的指针将是最简单的,但我不知道怎么会明显似乎谁可能在未来的某个时刻用我的图书馆的家伙,这是为什么他的程序段错误,因为他在结构中使用了错误的指针。

然而,添加一个void指针代替意味着我将不得不做一个基于上下文的函数,它将返回一个正确类型的指针(如果这是可能的 - 我真的不知道是不是),这引出了一个问题:

哪种返回类型可以返回不同类型的指针的函数? (...很明显,一个无效指针!)但是我仍然没有包含所需的类型以便于使用我的库的程序员使用 - 这里是伪代码我想做什么

pointer-with-type-info *fun(MemoryStruct *memory, RandomSession *session)
switch case on session->type
return pointer of appropriate type

应该在这里添加,从session->类型可以推断出指针应该是哪种类型。

提前感谢您阅读本文。

1 个答案:

答案 0 :(得分:1)

我理解你的问题的方式,你知道指针数据类型。我会使用void*而不是两个指针,因为您可以在以后添加更多数据类型而不创建更多字段。

要检索正确的值,可以创建两个函数:int getAsString(MemoryStruct, char** value)int getAsInteger(MemoryStruct, int &value)。如果成功,这些函数将返回非零值(true)。这样,您不仅可以检索正确的值,而且还可以知道是否可以在此数据类型中检索该值。