O J2C segundo o seu site garante a conversão na maior parte das vezes, certamente, códigos complexos como algorítimos utilizadores de ServerSocketChannel, SocketChannel e outras APIs sofisticadas do Java podem não ser de tanta confiança converter somente sem avaliar o comportamento do código em sua versão C++, mas para algorítimos corriqueiros, a conversão é certa e excelente.
Importante: O Java tem a garbage colletor (gc) e faça uma conversão consciente porque não existe coleta automática de objetos em C++.
O IDE dele é o Eclipse, portanto você deve possuir uma versão recente e compatível com JDK6.
O site do projeto J2C está em https://code.google.com/a/eclipselabs.org/p/j2c/.
A partir dele, você deve:
- baixar o JAR mais recente do J2C;
- após baixar o JAR, copie-o para a pasta $ECLISE_HOME$\dropins;
- abra o Eclipse (no meu caso testei no Windows 7 com o Eclipse Juno);
- clique sobre algum projeto Java na janela "Package Explorer";
- você deve ver uma opção chamada "Translate to C++".
Esta ferramenta exige como você criar um pasta vazia de mesmo nome do seu projeto precedido pela letra "c". Exemplo: Se você tem um projeto chamado "OlaMundo", então deve ter uma pasta paralela e vazia chamada "cOlaMundo".
A classe Java 6 a seguir é simplesmente feita para ser convertida.
HelloWorld em Java 6 antes da conversão
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Olá mundo!");
}
}
HelloWorld em versão C++ após conversão
// Generated from /UmProjetoJava6/src/HelloWorld.java
#include <HelloWorld.hpp>
#include <java/io/PrintStream.hpp>
#include <java/lang/NullPointerException.hpp>
#include <java/lang/String.hpp>
#include <java/lang/System.hpp>
template<typename ComponentType, typename... Bases> struct SubArray;
namespace java
{
namespace io
{
typedef ::SubArray< ::java::io::Serializable, ::java::lang::ObjectArray > SerializableArray;
} // io
namespace lang
{
typedef ::SubArray< ::java::lang::CharSequence, ObjectArray > CharSequenceArray;
typedef ::SubArray< ::java::lang::Comparable, ObjectArray > ComparableArray;
typedef ::SubArray< ::java::lang::String, ObjectArray, ::java::io::SerializableArray, ComparableArray, CharSequenceArray > StringArray;
} // lang
} // java
template<typename T>
static T* npc(T* t)
{
if(!t) throw new ::java::lang::NullPointerException();
return t;
}
HelloWorld::HelloWorld(const ::default_init_tag&)
: super(*static_cast< ::default_init_tag* >(0))
{
clinit();
}
HelloWorld::HelloWorld()
: HelloWorld(*static_cast< ::default_init_tag* >(0))
{
ctor();
}
void HelloWorld::main(::java::lang::StringArray* args)
{
clinit();
npc(::java::lang::System::out())->println(u"Olá mundo!"_j);
}
extern java::lang::Class *class_(const char16_t *c, int n);
java::lang::Class* HelloWorld::class_()
{
static ::java::lang::Class* c = ::class_(u"HelloWorld", 10);
return c;
}
java::lang::Class* HelloWorld::getClass0()
{
return class_();
}
É importante deixar claro que apenas mostrei a versão CPP da conversão, mas a ferramenta J2C gera outras classes e protótipos, subpastas para garantir a conversão. Depois basta ter um compilador de sua necessidade do código em C++ para uma plataforma de sua necessidade.
Para maiores informações, consulte a página oficial do projeto.
Espero ter algum oportunidade para utilizá-la em breve.
Nenhum comentário:
Postar um comentário