2011-08-22 22 views
23

Me gustaría envolver una biblioteca C dentro de una clase C++. Para mi clase C++ también me gustaría tener la misma declaración utilizada por estas funciones C: ¿es posible hacer eso?llamando a una función global con un método de clase con la misma declaración

Si, por ejemplo, tengo el siguiente caso, ¿cómo sería posible distinguir la función C de la de C++? Me gustaría llamar a la C fuera de curso.

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 
    } 
} 

Respuesta

40

Uso del scope resolution operator :::

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

Olvidó utilizar el operador de resolución de alcance en el ejemplo del código. Lo que tienes ahora es una llamada de función recursiva que causa stackoverflow en stackoveflow :) –

+0

@Als, Bo: * Suspiro * gracias, qué tonto de mi parte. –

4
::my_foo(val); 

que debe hacerlo.

4

Uso nombre calificado de búsqueda

::my_foo(val); 

Esto le dice al compilador que desea llamar la función global y no a la función local.

Cuestiones relacionadas