2011-08-22 9 views
23

Chciałbym zawinąć bibliotekę C w klasie C++. Dla mojej klasy C++ chciałbym również mieć tę samą deklarację, której używa ta funkcja C: czy można to zrobić?Wywołanie funkcji globalnej za pomocą metody klasy z tą samą deklaracją

Jeśli na przykład mam poniżej przypadek, jak byłoby możliwe odróżnienie funkcji C od C++? Chciałbym nazwać C jednym z kursu.

extern int my_foo(int val); // 

class MyClass{ 
    public: 
    int my_foo(int val){ 
      // what to write here to use 
      // the C functions? 
      // If I call my_foo(val) it will call 
      // the class function not the global one 
    } 
} 

Odpowiedz

40

Użyj scope resolution operator :::

int my_foo(int val){ 
    // Call the global function 'my_foo' 
    return ::my_foo(val); 
} 
+3

Zapomniałeś użyć operatora rozdzielczości w swoim przykładzie kodu. Co masz teraz jest rekursywny wywołanie funkcji powodujące stackoverflow na stackoveflow :) –

+0

@Als, Bo: * Westchnienie * dzięki, jak głupie mnie. –

4
::my_foo(val); 

że powinien to zrobić.

4

Zastosowanie nazwa kwalifikowana odnośnika

::my_foo(val); 

ten informuje kompilator, który chcesz wywołać funkcję globalnego, a nie funkcję lokalnego.

Powiązane problemy