0Pricing
C++ Academy · Aula

Usar SWIG para ligações entre várias linguagens

Gere ligações para várias linguagens de uma só vez com SWIG

Usar SWIG para ligações entre várias linguagens é uma aula grátis de C++ Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C++ Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C++ Academy inclui 4 aulas no total.

O que é SWIG?

O SWIG (Gerador simplificado de wrappers e interfaces) gera ligações para bibliotecas C/C++ em muitas linguagens: Python, Java, C#, Ruby, Perl, Lua, Go e outras.

Quando usar SWIG

O SWIG é especialmente útil quando precisa de ligações para várias linguagens a partir da mesma biblioteca C++ — escreva a interface uma vez e direcione-a para várias plataformas.

Arquivos de interface

O SWIG usa arquivos de interface .i para declarar o que deve ser exportado.

// example.i
%module example
%{
#include "example.h"
%}
%include "example.h"

Compilação das ligações

Execute o SWIG para gerar o código adaptador específico da linguagem. Em seguida, compile o adaptador junto com o código-fonte C++.

swig -python -c++ example.i
# generates example_wrap.cxx and example.py

g++ -shared -fPIC -I$(python3-config --prefix)/include/python3.x \
    example.cpp example_wrap.cxx -o _example.so

Tratamento de strings

O SWIG converte automaticamente tipos comuns: std::string ↔ str do Python, std::vector ↔ matrizes específicas da linguagem.

Personalização

Os typemaps do SWIG permitem personalizar como os tipos são convertidos entre C++ e a linguagem-alvo. É poderoso, mas detalhado.

Modelos

Instancie explicitamente os modelos C++ no arquivo .i para que o SWIG possa encapsulá-los.

%template(IntVector) std::vector<int>;

Ponteiros inteligentes

O SWIG pode encapsular std::shared_ptr para que referências nativas da linguagem gerenciem os tempos de vida. Ative esse recurso com %shared_ptr(Type).

Desvantagens

O SWIG é maduro, mas mostra sua idade:

  • Arquivos de interface detalhados
  • Mapas de tipos complexos para conversões não triviais
  • A documentação gerada automaticamente é mínima
  • A sobrecarga de desempenho é maior que a de ligações criadas especificamente para esse fim

Alternativas por linguagem

Ferramentas de ligação especializadas geralmente produzem resultados melhores:

  • pybind11 para Python
  • JNI ou JavaCPP para Java
  • cppyy para ligações Python em tempo de execução
  • cxx-rs para Rust

Quando o SWIG é a melhor opção

Escolha o SWIG quando:

  • Precisar de ligações para 3 ou mais linguagens a partir de uma única base de código
  • A biblioteca for grande e estável
  • A carga de manutenção de ferramentas de ligação separadas por linguagem for alta

Quando evitar o SWIG

Evite o SWIG quando:

  • Seu alvo for apenas uma linguagem — use uma ferramenta especializada
  • A API C++ usar modelos e recursos modernos de forma extensiva
  • Precisar do máximo desempenho na fronteira da FFI

Verificação rápida

Qual é a principal vantagem do SWIG em relação às ferramentas de ligação específicas de cada linguagem?

Recapitulação

O SWIG gera ligações a partir de um único arquivo de interface para várias linguagens. É melhor quando o alvo são várias linguagens ou quando se encapsulam bibliotecas C++ grandes e estáveis. Para projetos de uma única linguagem, prefira ferramentas de ligação criadas especificamente para esse fim, como o pybind11.

Perguntas Frequentes

A aula “Usar SWIG para ligações entre várias linguagens” é grátis?

Sim — o texto completo de “Usar SWIG para ligações entre várias linguagens” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C++ Academy, atualize para CoddyKit PRO. O curso de C++ Academy inclui 4 aulas no total.

O que vou aprender em “Usar SWIG para ligações entre várias linguagens”?

Gere ligações para várias linguagens de uma só vez com SWIG Você pratica C++ Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C++ Academy?

Nenhuma experiência prévia é necessária. C++ Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Usar SWIG para ligações entre várias linguagens”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C++ Academy?

Sim. Cada aula de C++ Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. extern C e a ABI de C
  2. Chamar Python a partir de C++ com pybind11
  3. C++ para fronteiras FFI de Rust
  4. Usar SWIG para ligações entre várias linguagens
← Voltar para C++ Academy