先說結論, 這應該是不可行的, 等於你想要直接把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的方式作到~
沒有留言:
張貼留言