【问题标题】:How to return a pointer with a type from a void pointer, when the type is known当类型已知时,如何从 void 指针返回具有类型的指针
【发布时间】:2013-01-23 15:26:51
【问题描述】:

我目前正在制作一个小型库,可以访问 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可以推断出指针应该是什么类型。

提前感谢您阅读本文。

【问题讨论】:

  • 是否可以使用 C++ 和模板,还是仅限于使用 C?
  • 我更愿意将其保留在 C 中,因为我更愿意这样做,而不是使用 C++ 和模板。
  • 那么你就无法使用 void*

标签: c types void-pointers


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2015-11-03
    • 2021-09-20
    • 1970-01-01
    • 2012-03-19
    • 2018-04-06
    • 2015-02-14
    • 1970-01-01
    • 2020-11-01
    相关资源
    最近更新 更多