如果您想要一种使 C++ 代码可从其他编译器/标准库调用的方法,您可以使用来自https://github.com/jbandela/cppcomponents的 cppcomponents 。完全披露 - 我是图书馆的作者。
这是一个简单的 hello world 示例
首先创建一个名为 library.h 的文件在这个文件中,您将定义组件
#include <cppcomponents/cppcomponents.hpp>
struct IPerson
:public cppcomponents::define_interface<cppcomponents::uuid<0xc618fd04,0xaa62,0x46e0,0xaeb8,0x6605eb4a1e64>>
{
std::string SayHello();
CPPCOMPONENTS_CONSTRUCT(IPerson,SayHello);
};
inline std::string PersonId(){return "library!Person";}
typedef cppcomponents::runtime_class<PersonId,cppcomponents::object_interfaces<IPerson>> Person_t;
typedef cppcomponents::use_runtime_class<Person_t> Person;
接下来创建 library.cpp 在这个文件中你将实现接口和组件
#include "library.h"
struct PersonImplementation:cppcomponents::implement_runtime_class<PersonImplementation,Person_t>
{
std::string SayHello(){return "Hello World\n";}
};
CPPCOMPONENTS_DEFINE_FACTORY(PersonImplementation);
最后,这是使用您的实现的主程序(称为 example1.cpp)
#include "library.h"
#include <iostream>
int main(){
Person p;
std::cout << p.SayHello();
}
要构建程序,您需要下载 cppcomponents(只需从上面的 git 链接克隆)。它是一个只有头文件的库,只需要一个 c++11 编译器。
这是在 Windows 上构建它的方法
cl /EHsc example1.cpp /I pathtocppcomponents
g++ -std=c++11 library.cpp -o library.dll -shared -I pathtocppcomponents
其中 pathocppcomponents 是 cppcomponents 的目录。我假设你的路径中有 cl 和 g++。
要运行该程序,请确保 library.dll 与 example1.exe 位于同一目录并运行 example1.exe
该库需要相当兼容的 c++11 支持,因此它需要 MSVC 2013 Preview 和至少 g++ 4.7。该库适用于 Windows 和 Linux。