Jos on valmiina C++ funktioita, joiden kutsut on periaatteessa mahdollista muuttaa C- funktioiksi, pitää rakentaa väliin C++:lla funktio joka on tyyppiä "C". Muuttaminen on mahdollista, mikäli funktion parametrilistassa olevat tyypit ovat myös C- tyyppejä tai sellaisiksi muunnettavissa. Usein myös C++ luokat voidaan muuttaa C- tietueiksi, koska itse luokan alkiot ovat samanlaisia kuin C- tietueen alkiot.
/* PISTE.C */
#include "piste2ali.h"
int main(void)
{
tPiste p={4,5};
tulosta(&p);
return 0;
}
/* PISTE2ALI.H */
typedef struct {
int x,y;
} tPiste;
#ifdef __cplusplus
extern "C"
#endif
void tulosta(const tPiste *p);
/* PISTE2ALI.CPP */
#include <stdio.h>
#include "piste2ali.h"
class cPiste {
int x,y;
public:
void tulosta() const;
};
void cPiste::tulosta() const
{
printf("(%d,%d)\n",x,y);
}
extern "C" void tulosta(const tPiste *p)
{
((cPiste *)p)->tulosta();
}Huomautus! Esimerkki toimii vain jos C++ tietueessa (luokassa) ei ole yhtään virtuaalista funktiota! Jos luokassa on virtuaalisia funktioita, pitää tehdä osoittimen tyypinmuunnoksen (cPiste *) sijasta rehellinen sijoitus C++ tyyppiseen apumuuttujaan (ks. Olio- osoittimet):
extern "C" void tulosta(const tPiste *p)
{
cPiste ap(p); // Luokkassa cPiste esitelty konstruktori cPiste(tPiste *)
ap.tulosta();
}