2011年10月31日 星期一

[C++] wrapper C++ method in C (inline)

先說結論, 這應該是不可行的, 等於你想要直接把C++ embed在C裡面. 通常inline是要寫在header file, 讓使用者直接include.

在這情形就等於你要讓C program直接include C++ library, 所以無法達成.

那如果寫在.cpp裡面, 編成.o, 再跟C program 一起compile.


// this is foo.cpp
#ifdef __cplusplus
extern "C" {
#endif

#include "foo.h"

int foo()
{
int i = 0;

return i++;
}

#ifdef __cplusplus
}
#endif

// this is foo.h
inline int foo();

接下來main.c


#include
#include "foo.h"

int main()
{
int t = foo();

printf("%d\n", t);
return 0;
}

但是在compile main.o foo.o會找不到foo這個symbol, 利用strings也找不到, 這是因為inline寫在foo.cpp, compile展開完之後, foo因為被宣告程inline, 所以就沒有出現在foo.o裡面了.

因此, 在C裡面要wrap C++ library並且inline 應該是不可行的, 不過可以使用wrapper function回傳function pointer的方式作到~