si se permite el uso de Cog en su proyecto, su código se vuelve más legible:
/*[[[cog
# definitions ----
import cog
def AddDeclaration(templateArg , restOfDeclaration):
cog.outl(' %s struct %s; ' % (templateArg , restOfDeclaration))
# generation ---
types = ['bool' , 'std::string']
names = ['Foo' , 'Bar']
for index in range(len(names)):
AddDeclaration('template<int, %s>' % types[index] , names[index])
]]]*/
//[[[end]]]
Después de ejecutar dentada sobre este archivo, obtendrá:
/*[[[cog
# definitions ----
import cog
def AddDeclaration(templateArg , restOfDeclaration):
cog.outl(' %s struct %s; ' % (templateArg , restOfDeclaration))
# generation ---
types = ['bool' , 'std::string']
names = ['Foo' , 'Bar']
for index in range(len(names)):
AddDeclaration('template<int, %s>' % types[index] , names[index])
]]]*/
template<int, bool> struct Foo; <---------------- generated by Cog!!
template<int, std::string> struct Bar;
//[[[end]]]
Incluso puede mueva sus definiciones en archivos .py separados y la sección del engranaje se verá así:
declarations.py
import cog
def AddDeclaration(templateArg , restOfDeclaration):
cog.outl(' %s struct %s; ' % (templateArg , restOfDeclaration))
my.h
/*[[[cog
# definitions ----
import declarations
# generation ---
types = ['bool' , 'std::string']
names = ['Foo' , 'Bar']
for index in range(len(names)):
AddDeclaration('template<int, %s>' % types[index] , names[index])
]]]*/
template<int, bool> struct Foo;
template<int, std::string> struct Bar;
//[[[end]]]
la principal ventaja de la utilización de engranaje es que a obtener el control completo de su generación de código, completamente evitar líos ilegibles usando preprocesador impulso o cosas como eso.
la principal desventaja es que agrega una nueva dependencia de herramienta a su proyecto, también porque necesita ajustar su uso en comentarios con los marcadores de la sección de engranaje, en realidad podría ser peor que escribir el código manualmente para usos pequeños. Realmente vale la pena cuando tiene que declarar grandes enumeraciones o gran cantidad de código repetitivo inevitable
posible duplicado de [C++ macro problema (interpretación de coma,)] (http: //desbordamiento de pila.com/questions/5348077/c-macro-problem-interpretation-of-comma) –
@OliCharlesworth Ah, no encontré ese en mi búsqueda. La respuesta no parece responder a mi problema exacto, aunque proporciona algunos elementos de reflexión. Gracias. – chrisaycock
Una pregunta más reciente tiene algunas respuestas excelentes: http://stackoverflow.com/questions/13842468/comma-in-cc-macro/13842784#13842784 – jjrv