Articles of plantillas

¿Por qué se permite la especialización parcial de una plantilla de clase anidada, mientras que completa no?

template struct A { template struct B {};. template struct C {}; }; template template struct A::B {}; // error: enclosing class templates are not explicitly specialized template template struct A::C {}; // ok Entonces, ¿por qué no se permite la especialización explícita de una clase (o función) anidada interna, si la clase externa no […]

¿Qué hacen los comstackdores con la ramificación en tiempo de comstackción?

EDITAR: Tomé el caso “if / else” como un ejemplo que a veces puede resolverse en tiempo de comstackción (por ejemplo, cuando se trata de valores estáticos, cf ). Adaptar las respuestas a continuación a otros tipos de ramificación estática (por ejemplo, twigs múltiples o twigs de criterios múltiples) debería ser sencillo. Tenga en cuenta […]

C ++ 11: cálculo del tiempo de comstackción de la matriz

Supongamos que tengo alguna función constexpr f: constexpr int f(int x) { … } Y tengo alguna const int N conocida en tiempo de comstackción: Ya sea #define N …; o const int N = …; según sea necesario por tu respuesta. Quiero tener una matriz int X: int X[N] = { f(0), f(1), f(2), […]

Plantilla typedefs – ¿Cuál es su trabajo?

C ++ 0x tiene alias de plantilla (a veces referidos como template typedefs). Mira aquí . La especificación actual de C ++ no. ¿Qué te gusta usar mientras trabajas? ¿Objetos contenedores o macros? ¿Sientes que vale la pena?

Preprocesador C ++: evitar la repetición de código de la lista de variables miembro

Tengo varias clases, cada una con diferentes variables miembro que se inicializan trivialmente en un constructor. Aquí hay un ejemplo: struct Person { Person(const char *name, int age) : name(name), age(age) { } private: const char *name; int age; }; Cada uno tiene una función de print() asociada print() . template void print(const Person &person) […]

usar nombre de clase en una plantilla de clase sin parámetros de plantilla

el código proviene de un libro de C ++ como a continuación: ¿Por qué este miembro público Link * next no tiene argumento typename? template class Link { private: static Link* freelist; public: E element; Link* next; // this line confused me…. Link(const E& elemval, Link* nextval = NULL) { element = elemval; next = […]

referencias constantes con typedef y plantillas en c ++

Escuché que los objetos temporales solo se pueden asignar a referencias constantes. Pero este código da error #include template t const& check(){ return t(); //return a temporary object } int main(int argc, char** argv){ const int &resCheck = check(); /* fine */ typedef int& ref; const ref error = check(); / *error */ return 0; […]

Especialización de plantillas Alias

¿Pueden las plantillas de alias (14.5.7) estar explícitamente especializadas (14.7.3)? Mi estándar-fu me falla, y no puedo encontrar un comstackdor para probar. El texto “cuando una plantilla-id se refiere a la especialización de una plantilla de alias” implica que sí , pero luego el ejemplo parece referirse a otra cosa, lo que implica que no […]

¿Por qué el comstackdor no puede deducir el tipo de plantilla de los argumentos predeterminados?

Me sorprendió que el siguiente código resultara en could not deduce template argument for T error could not deduce template argument for T : struct foo { template void bar(int a, T b = 0.0f) { } }; int main() { foo a; a.bar(5); return 0; } Llamar a.bar(5) soluciona el problema. ¿Por qué el […]

¿Puede el scope de una variable Jinja extenderse más allá en un bloque interno?

Tengo la siguiente plantilla de Jinja: {% set mybool = False %} {% for thing in things %} {% if current_user %} {% if current_user.username == thing[‘created_by’][‘username’] %} {% set mybool = True %} mybool: {{ mybool }} Edit {% endif %} {% endif %} Flag {% endfor %} {% if not mybool %} mybool […]