2009-12-30 6 views
0

Puis-je lier une fonction membre de cette manière? redéclarant la méthode en tant que membre et l'obtenir appeler la méthode Mmsystem.h pour ne pas avoir à l'envelopper?Lier une fonction membre directement à la méthode C déclarée dans un en-tête

#include <windows.h> 
#include <Mmsystem.h> 

    namespace SoundLib { 

public class CWave 
{ 
public: 
    // WaveIn call 
    external UINT waveOutGetNumDevs(VOID); 
}; 

} 
+1

Ce code ne me ressemble pas beaucoup au C++. –

+3

merci, je m'attends à de l'aide. –

+1

Les travaux suivants sur GCC/elf: 'struct A {statique void f() __attribute __ ((alias (" f "))); } extern "C" void f() {std :: cout << "hello" << std :: endl; } int main() {f(); Un F(); } 'et imprime" bonjour "deux fois. –

Répondre

1

Non, vous devez l'envelopper. En outre, votre code a quelques erreurs, telles que external par rapport à extern (bien que c'était théorique de toute façon) et public avant votre classe.

+0

Merci! Je ne suis vraiment pas un programmeur C++. Je joue juste avec. Quoi qu'il en soit, en utilisant VS2008 il ne se plaint pas du public avant le nom de la classe. Mais comme vous l'avez dit, c'est théorique. Je vais l'envelopper. –

1

Désolé, non, vous ne pouvez pas.

5

Non, mais vous pouvez l'envelopper avec inline et même static et espérer que le compilateur soit assez intelligent (ce qui est probable).

class CWave { 
public: 
    static inline UINT waveOutGetNumDevs(void) { return ::waveOutGetNumDevs(); } 
}; 
+2

Ce code provoquera une récursion infinie. –

+1

devrait être '{return :: waveOutGetNumDevs(); } ' –

+0

Merci, les gars, bien sûr. Je l'ai réparé. –

4

Vous devez appeler explicitement la fonction enveloppée:

class CWave 
{ 
public: 
    static UINT waveOutGetNumDevs(VOID) 
    { 
     return ::waveOutGetNumDevs(); 
    } 
}; 

Notez la double côlon. Puisque votre méthode et la fonction globale ont le même nom, vous avez besoin du double deux-points pour empêcher la récursion infinie.

Questions connexes