假设我有这种方法:
matrix* multiply(smatrix *sm, matrix *m){
即使它返回matrix *
我想动态更改其返回类型。我可以将返回类型设置为void *
并稍后投射吗?
答案 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
}
Union
与Struct
非常相似,只是Union
成员共享相同的内存,因此一次只能设置/使用所有联合成员中的一个成员。但要小心 - 你必须清楚地知道在确切情况下对功能的期望(但我认为同样的警告适用于void*
案例)。
喝彩!