##Cxx.jl
The Julia C++ Foreign Function Interface (FFI).
# 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")
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
# 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
julia> jnum = 10
10
julia> cxx"""
void printme(int x) {
std::cout << x << std::endl;
}
"""
julia> @cxx printme(jnum)
10
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
julia> cxx"""
void testJuliaPrint() {
$:(println("\nTo end this test, press any key")::Nothing);
}
"""
julia> @cxx testJuliaPrint()
To end this test, press any key
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();