File di intestazione comune per C ++ e JavaScript

2

Ho un'app che esegue un backend del server C ++ e Javascript sul client. Vorrei definire determinate stringhe una sola volta, per entrambi i pezzi di codice. Ad esempio, potrei avere una classe CSS "row-hover" - Voglio definire questo nome di classe in un posto solo nel caso lo cambi in seguito.

C'è un modo semplice per includere, o leggere, una sorta di file di definizioni comuni in C ++ e JavaScript? Idealmente come una fase di compilazione / pre-elaborazione ma qualsiasi approccio pulito.

    
posta paperjam 28.09.2012 - 18:01
fonte

4 risposte

7

Ho proposto un approccio abbastanza simile qui: link per un problema simile.

Suggerirei di scrivere un piccolo script che generi codice per C ++ e JavaScript, con la configurazione che si desidera comune. Puoi anche utilizzare due modelli in una libreria di modelli, che verranno eseguiti come parte del processo di generazione che genererà i file appropriati per ciascuna lingua.

Utilizzando una sintassi freemarker -like (anche se non suggerisco di includere un'altra lingua!), potrebbe esserci qualcosa di simile per JavaScript :

commonStuff = { config1: ${value1},
config2: ${value2}
}

e un altro modello per l'implementazione C ++.

Come suggerito nei commenti qui sotto, un buon candidato per questo, è usare sed , in modo da non dover introdurre un'altra lingua poiché il tuo progetto ne ha già due.

    
risposta data 28.09.2012 - 18:07
fonte
1

Quello che stai descrivendo è ciò che viene comunemente fatto con linguaggi come JSP e PHP, iniettando nomi definiti sul server. Se non puoi usare queste lingue, allora non penso che valga la pena che stai tentando semplicemente di evitare di dover cambiare i nomi delle classi in più di un punto. Certo, è generalmente una buona pratica, ma se rende il tuo codice inutilmente illeggibile, dovresti evitarlo come la peste.

C # è abbastanza simile a C ++ che la transizione dovrebbe essere liscia, e C # ha il supporto Asp che consente di definire le costanti e rilasciarle direttamente nella pagina.

Tuttavia, supponendo che tu non voglia cambiare lingua, il mio consiglio è di fare la cosa migliore: avere un'intestazione C ++ e un file css che dichiarino gli stessi nomi. Se hai bisogno di cambiare i nomi, devi solo cambiare in questi due posti e hai perso un po 'di tempo in più. Non perdere di vista che la semplicità è il tuo obiettivo, non evitando la duplicazione del codice, e in questo caso, non posso assolutamente pensare che quello che stai tentando sia la soluzione più semplice.

    
risposta data 28.09.2012 - 18:24
fonte
0

Genera il javascript in base alle definizioni nel file C ++. Se hai già un sistema di template per l'HTML, puoi probabilmente riutilizzarlo per interpolare i valori di C ++ nel javascript.

Se il carico o le prestazioni del server sono un problema, prendi in considerazione la memorizzazione nella cache del javascript (sia sul server che sul client), oppure esegui una precompilazione del tutto (è un piccolo passo da un programma C ++ che serve il javascript dinamico al volo uno che lo salva in un file).

    
risposta data 28.09.2012 - 20:53
fonte
0

È possibile utilizzare macro in C / C ++ per modificare gli identificatori secondo necessità. Per javascript l'ovvio candidato è var poiché è necessario solo in javascript ... può essere ridefinito come necessario per qualsiasi tipo di c.

c-header.h

//constant integers
#define var const int
#include "int-consts.js"
#undef var

//constant strings
#define var const char*
#include "string-consts.js"
#undef var

//arrays of strings
#define var const char**
#define new (const char*[])
#define Array(x,...)  {x,__VA_ARGS__}
#include "string-arrays.js"
#undef new
#undef var

//and so forth for other types

int-consts.js

var swapMagicOffset = 4086;

string-consts.js

var swapMagic = "SWAP-SPACE";
var swapMagic2 = "SWAPSPACE2";

string-arrays.js

var cars = new Array("Ford", "Chevy", "Dodge");
    
risposta data 26.01.2016 - 11:24
fonte

Leggi altre domande sui tag