##Cxx.jl
The Julia C++ Foreign Function Interface (FFI).
Installation
# You will need to install Julia v0.4-dev
# Cxx.jl requires "staged functions" available only in v0.4
# After installing julia-v0.4-dev, build it:
$ make -C deps distclean-openblas distclean-arpack distclean-suitesparse && make cleanall
$ make –j4
In the Julia terminal, type
Pkg.clone("https://github.com/Keno/Cxx.jl.git")
Pkg.build("Cxx")
How it works
The main interface provided by Cxx.jl is the @cxx macro. It supports two main usages:
- Static function call @cxx mynamespace::func(args...)
- Membercall (where m is a CppPtr, CppRef or CppValue) @cxx m->foo(args...)
To embedd C++ functions in Julia, there are two main approaches:
# Using @cxx (e.g.):
cxx""" void cppfunction(args){ . . .} """ => @cxx cppfunction(args)
# Using icxx (e.g.):
julia_function (args) icxx""" *code here* """ end
Using Cxx.jl:
Example 1: Embedding a simple C++ function in Julia
# include headers
julia> using Cxx
julia> cxx""" #include<iostream> """
# Declare the function
julia> cxx"""
void mycppfunction() {
int z = 0;
int y = 5;
int x = 10;
z = x*y + 2;
std::cout << "The number is " << z << std::endl;
}
"""
# Convert C++ to Julia function
julia> julia_function() = @cxx mycppfunction()
julia_function (generic function with 1 method)
# Run the function
julia> julia_function()
The number is 52
Example 2: Pass numeric arguments from Julia to C++
julia> jnum = 10
10
julia> cxx"""
void printme(int x) {
std::cout << x << std::endl;
}
"""
julia> @cxx printme(jnum)
10
Example 3: Pass strings from Julia to C++
julia> cxx"""
void printme(const char *name) {
// const char* => std::string
std::string sname = name;
// print it out
std::cout << sname << std::endl;
}
"""
julia> @cxx printme(pointer("John"))
John
Example 4: Pass a Julia expression to C++
julia> cxx"""
void testJuliaPrint() {
$:(println("\nTo end this test, press any key")::Nothing);
}
"""
julia> @cxx testJuliaPrint()
To end this test, press any key
Example 5: Embedding C++ code inside a Julia function
function playing()
for i = 1:5
icxx"""
int tellme;
std::cout<< "Please enter a number: " << std::endl;
std::cin >> tellme;
std::cout<< "\nYour number is "<< tellme << "\n" <<std::endl;
"""
end
end
playing();