【发布时间】:2019-11-01 17:07:21
【问题描述】:
我想将一个变量按值传递(我使用指针只是为了避免给参数一个类型)到一个函数中,以便它可以被包含在其中的另一个函数使用。内部函数可以被赋予任何类型的变量。
我已经尝试过使用通用指针 (void*),但它告诉我“'void*' 不是指向对象的指针类型”。我不想强制转换指针,因为使用指针的全部意义在于它是通用的。
void print_string(char *string, void *variable) {
Serial.print(string);
Serial.print(": ");
Serial.print(*variable); # This takes a variable of any type (int, float, double, char *);
Serial.println();
}
我希望能够提供 int、double、float 或 string (char*)。
【问题讨论】:
-
你不能。然而,这是 C++,而不是 C,不是吗?在 C++ 中,您可以使用函数模板。
-
你必须投它,没有别的办法。当然,使用这样一个指针的全部意义在于它是通用的,但它对用户来说是通用的——某个地方的某个人最终必须编写允许它通用的代码。
-
@immibis:这段代码中没有任何东西阻止它成为 C(除了指向
void的指针的明显取消引用,这也不是有效的 C++)。 -
它是 C++(Arduino IDE,所以 C++ 有很多额外的库),但我试图只使用 C。
-
@PaulGriffiths "Serial.println" 加上我碰巧已经知道 Arduino IDE 使用 C++。