如何在 C++ class 中实现在 C header 中用 "extern" 子句指定的函数?
How can I implement a function, which is specified with an "extern" clause in a C header, within a C++ class?
我将在用 C++ 编写的项目中使用用 C 实现的 driver 库。图书馆的 header file contains a number of function stubs declared as extern 我将不得不实施:
extern uint8_t ADS1x1x_i2c_start_write (uint8_t i2c_address);
我的 C++ 代码现在包含一个名为 vfd
的 class,它将包含实现相应函数存根的静态方法,就像这样:
uint8_t vfd::ADS1x1x_i2c_start_write (uint8_t i2c_address) {
uint8_t ret = 0x00;
// do something
return ret;
}
在 vfd
class 的 header 文件中,相应的行将如下所示:
class vfd {
public:
uint8_t ADS1x1x_i2c_start_write (uint8_t i2c_address);
}
我应该如何声明我的方法,以便编译器将它们识别为我的库 header 中相应 extern
函数的实现?
你不能。您可以在您的 C++ 文件中单独实现这些 C 函数,并让它们在 class:
中调用您的静态函数
extern "C" uint8_t ADS1x1x_i2c_start_write (uint8_t i2c_address) {
vfd::ADS1x1x_i2c_start_write(address);
}
它们是静态的,对吧?否则你还必须提供一个 this
对象供方法调用,它在 C API 中没有,你必须自己弄清楚,例如:
extern "C" uint8_t ADS1x1x_i2c_start_write (uint8_t i2c_address) {
some_var_of_type_vfd.ADS1x1x_i2c_start_write(address);
}
How shall I declare my methods so that the compiler will recognise them as implementations of the respective extern functions from my library header?
你不能那样做。 extern "C"
与 class 的 static
成员函数不同。
您可以实现 extern "C"
函数,使其传递给 class 的 static
成员函数。
extern "C" uint8_t ADS1x1x_i2c_start_write (uint8_t i2c_address)
{
return vfd::ADS1x1x_i2c_start_write(i2c_address);
}
我将在用 C++ 编写的项目中使用用 C 实现的 driver 库。图书馆的 header file contains a number of function stubs declared as extern 我将不得不实施:
extern uint8_t ADS1x1x_i2c_start_write (uint8_t i2c_address);
我的 C++ 代码现在包含一个名为 vfd
的 class,它将包含实现相应函数存根的静态方法,就像这样:
uint8_t vfd::ADS1x1x_i2c_start_write (uint8_t i2c_address) {
uint8_t ret = 0x00;
// do something
return ret;
}
在 vfd
class 的 header 文件中,相应的行将如下所示:
class vfd {
public:
uint8_t ADS1x1x_i2c_start_write (uint8_t i2c_address);
}
我应该如何声明我的方法,以便编译器将它们识别为我的库 header 中相应 extern
函数的实现?
你不能。您可以在您的 C++ 文件中单独实现这些 C 函数,并让它们在 class:
中调用您的静态函数extern "C" uint8_t ADS1x1x_i2c_start_write (uint8_t i2c_address) {
vfd::ADS1x1x_i2c_start_write(address);
}
它们是静态的,对吧?否则你还必须提供一个 this
对象供方法调用,它在 C API 中没有,你必须自己弄清楚,例如:
extern "C" uint8_t ADS1x1x_i2c_start_write (uint8_t i2c_address) {
some_var_of_type_vfd.ADS1x1x_i2c_start_write(address);
}
How shall I declare my methods so that the compiler will recognise them as implementations of the respective extern functions from my library header?
你不能那样做。 extern "C"
与 class 的 static
成员函数不同。
您可以实现 extern "C"
函数,使其传递给 class 的 static
成员函数。
extern "C" uint8_t ADS1x1x_i2c_start_write (uint8_t i2c_address)
{
return vfd::ADS1x1x_i2c_start_write(i2c_address);
}