我正试图在C++中的一个类中使用弱函数。以下是我写的:
#include <stdio.h>
#include <iostream>
class A {
public:
void func(int argc, char *argv[]) __attribute__((weak));
};
// optional definition:
#if 0
void A::func(int argc, char *argv[]) {
printf("In func()n");
for(int aa = 0; aa < argc; aa++){
printf("arg %d = %s n", aa, argv[aa]);
}
}
#endif
int main(int argc, char *argv[]) {
A a1;
if (a1.func){
a1.func(argc, argv);
} else {
printf("func() not availablen");
}
return 0;
}
但这给出了以下编译错误:
main.cpp: In function ‘int main(int, char**)’:
main.cpp:21:16: error: cannot convert ‘A::func’ from type ‘void (A::)(int, char**)’ to type ‘bool’
if (a1.func){
^
如果我把func((移到类之外,并使用gcc而不是g++,它编译得很好,可以按预期工作。有人能告诉我出了什么问题吗。基本上,我想实现仅在某些类函数可用时调用它们(这是一个可选功能(,而不使用cpp文件中的编译器标志。
C++对此有一个标准机制。不需要链接器技巧。
class Base {
public:
virtual void func(int argc, char *argv[])
{
printf("func() not availablen");
}
};
class A : public Base {
public:
#if 0
void func(int argc, char *argv[]) override;
#endif
};
#if 0
void A::func(int argc, char *argv[]) {
printf("In func()n");
for(int aa = 0; aa < argc; aa++){
printf("arg %d = %s n", aa, argv[aa]);
}
}
#endif
int main(int argc, char *argv[]) {
A a1;
a1.func(argc, argv);
}