2013-01-23 68 views
1

我目前正在制作一个小型库,它可以访问random.org并获得随机字符串或整数。尽管我已经遇到了一个小问题,但是设计明智,而且我无法决定哪两种方法最好,所以我会写下我关于两者的想法,并提出我认为与两者都相关的问题。如何从void指针返回一个类型的指针,当类型已知

我现在有这样一个结构:

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

这是我的“问题”的来源,因为我现在已经在整数处理到我的图书馆加入。

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

增加一个整数指针将是最简单的,但我不确定在未来的某个时间点可能会使用我的库的人有多明显,这就是他的程序出现故障的原因,因为他在结构中使用了错误的指针。

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

哪个返回类型可以返回不同种类的指针的函数? (......很明显,是一个无效的指针!)但是我仍然没有将想要的类型包括在内以方便使用我的库的程序员 - 这是将它放入伪代码中,我想要做什么。

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

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

非常感谢您阅读本文。

+1

是否可以使用C++和模板,还是仅限于使用C? – spartygw

+0

我宁愿将它保留在C中,因为我对此更加适应,而不是进入C++和模板。 –

+0

那么你坚持使用void * –

回答

1

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

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