Я пытаюсь использовать слабую функцию в классе в 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 available\n");
}
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){
^
Если я переместу забаву c () за пределы класса и использую g cc вместо g ++ он отлично компилируется и работает как положено. Может кто-нибудь подскажите пожалуйста в чем проблема. По сути, я хочу добиться вызова некоторых функций класса, только если они доступны (дополнительная функция) без использования флагов компилятора в файле cpp.