1

我目前正在制作一个可以访问 random.org 并获取随机字符串或整数的小型库。不过,在设计方面,我现在遇到了一个小问题,我无法决定我的两种方法中哪一种是最好的,所以我会写下我对这两种方法的想法,并提出我认为与这两种方法相关的问题.

我目前有一个这样的结构:

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

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

可以看出,该指针当前是一个 char 指针,并且由于我希望能够处理印迹整数和字符,我应该添加另一个指针 - 一个整数指针 - 还是应该将它改为一个 void 指针并制作一个将返回正确类型的指针的函数?

添加一个整数指针将是最简单的,但我不确定对于将来可能会使用我的库的人来说这看起来有多明显,这就是他的程序段错误的原因,因为他使用了错误的结构中的指针。

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

可以返回不同类型指针的函数具有哪种返回类型?(......很明显,一个 void 指针!)但是我仍然没有包含想要的类型,以便使用我的库的程序员轻松使用 - 这是我想做的伪代码.

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

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

预先感谢您阅读本文。

4

1 回答 1

1

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

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

于 2013-01-23T15:34:33.803 回答