Wt Framework de desarrollo web en C++

Wt es un framework de desarrollo web que incluye su propio servidor web, si eres un empedernido desarrollador de C posiblemente te sea útil.

Especialmente si eres alguien que no tiene interés alguno en aprender a utilizar lenguajes interpretados de los mortales (PHP, Ruby, Python, etc) o te importa poco lo que signifique DHTML, Javascript, CSS, AJAX, etc. Wt se encarga de la presentación y tu de la funcionalidad y los contenidos.

De los 11 beneficios que menciona el autor, el único que considero 100% válido es el portar viejas aplicaciones de escritorio en C++ a web fácilmente pero esto obviamente solo va a ser en casos muy puntuales.

También existen otras opciones, como Tntnet que es un servidor web que te permite crear templates con código de C++ embebido por medio de tags, tal como lo hace PHP o ASP.

Este es el código, de ejemplo en un simple Hello World con un botón. Haz clic para verlo funcionando.

/*
* Copyright (C) 2006 Wim Dumon
*/
  
#include <wapplication>
#include <wcontainerwidget>
#include <wtext>
#include <wpushbutton>

using namespace Wt;

// Este es el punto de entrada para nuevas sesiones
//
// Esta funcion se ejecuta cuando un nuevo usuario navega en la aplicacion,
// y despues que la libreria ha negociado el soporte para el navegador.
// Debe regresar un nuevo objeto WApplication

WApplication *createApplication(const WEnvironment& env)
{
  // Instanciando a la aplicacion Wt.
  WApplication *appl = new WApplication(env);

  // Estableciendo el titulo de la aplicacion
  appl->setTitle("Hello world!");

  // Se pueden agregar Widgets a un padre llamando addWidget()...
  // WApplication::root() es un WContainerWidget que esta asociado con
  // la ventana completa del navegador.
  appl->root()->addWidget(new WText(L"Hello, World!"));

  // .. o especificando un pariente en la construccion
  WPushButton *Button = new WPushButton(L"Quit", appl->root());

  // Escuchar eventos del usuario usando un mecanismo de señales. 
  Button->clicked.connect(SLOT(appl, WApplication::quit));

  return appl;
}

int main(int argc, char **argv)
{
   return WRun(argc, argv, &createApplication;);
}

Prefiero mil veces usar algo para lo que fue hecho originalmente en lugar de complicar las cosas, pero nunca esta de mas saberlo.