动态更改返回类型?

时间:2011-03-25 10:35:06

标签: c

假设我有这种方法:

matrix* multiply(smatrix *sm, matrix *m){

即使它返回matrix *我想动态更改其返回类型。我可以将返回类型设置为void *并稍后投射吗?

4 个答案:

答案 0 :(得分:3)

您可以声明 void * multiply(smatrix * sm,matrix * m) 然后在后面对返回类型进行类型转换

答案 1 :(得分:1)

是的,您可以返回一个void *指针并将其转换为您想要的任何内容。只要确保你正在返回你所期望的,否则你可能会访问错误的内存。

以这种方式设计代码可能不好,因为它可能会变得模棱两可。

答案 2 :(得分:0)

你可以在对函数的调用中进行强制转换。

struct wibble
  *w;

w = (struct wibble *)( multiply(sm, m) );
顺便说一句,你可能想要考虑不是typedef'ing矩阵。我想它是一个结构,所以它已经有了一个类型。使用typedef增加代码的复杂性;这就是你得到的全部。

答案 3 :(得分:0)

已经提到了一个选项 - 返回类型(void*)。不过我想在此提及另一个未讨论的选项 - 返回类型Union,如下所示:

typedef union {
    int scalar;
    int* vector;
    int** matrix;
} custom_type;


custom_type* myFunction() {
// todo
}

UnionStruct非常相似,只是Union成员共享相同的内存,因此一次只能设置/使用所有联合成员中的一个成员。但要小心 - 你必须清楚地知道在确切情况下对功能的期望(但我认为同样的警告适用于void*案例)。

喝彩!