Cuando una plantilla hereda públicamente de otra plantilla, ¿no se supone que los métodos públicos básicos son accesibles? template class Test { public: Test() {} int MyMethod1() { return a; } }; template class Another : public Test { public: Another() {} void MyMethod2() { MyMethod1(); } }; int main() { Another a; a.MyMethod1(); a.MyMethod2(); […]
Me gustaría depurar algún código de plantilla para entenderlo mejor. Lamentablemente, soy nuevo en la metaprogtwigción de plantillas y ES difícil para mí entrar. Cuando trato de generar los archivos fuente preprocesados obtengo 125 000 líneas de código: / Entonces, ¿hay alguna manera de ver el Código generado? (La biblioteca que estoy usando es SeqAn […]
Estoy intentando recrear el patrón Observer en el que puedo reenviar parámetros perfectamente a una función miembro dada de los observadores. Si bash pasar la dirección de una función miembro que tiene varias anulaciones , no puede deducir la función de miembro correcta en función de los argumentos. #include #include #include template struct observer_list { […]
He escuchado de muchas personas que el uso de plantillas hace que el código sea lento. ¿Es realmente cierto? Actualmente estoy construyendo una biblioteca. Hay lugares donde si no se crean plantillas, se produciría un problema de administración del código. A partir de ahora puedo pensar dos soluciones a este problema: use #defines Use plantillas […]
He estado progtwigndo en C ++ durante algunos años, y he usado bastante STL y he creado mis propias clases de plantilla varias veces para ver cómo se hace. Ahora trato de integrar las plantillas más profundamente en mi diseño de OO, y un pensamiento molesto sigue volviendo a mí: son solo macros, de verdad […]
En C ++ 11, ahora es la syntax válida: vector<vector> MyMatrix; mientras que anteriormente, tenía que escribirse así (observe el espacio): vector<vector > MyMatrix; Mi pregunta es: ¿cuál es la solución que usa el estándar para permitir la primera versión? ¿Podría ser tan simple como hacer > un token en lugar de >> ? Si […]
Aquí hay un ejemplo de código que reproduce mi problema: template class Base { public: Base() {} virtual ~Base() {} protected: int myOption; virtual void set() = 0; }; template class ChildClass : public Base < std::vector > { public: ChildClass() {} virtual ~ChildClass() {} protected: virtual void set(); }; template void ChildClass::set() { myOption […]
Intento crear un botón que tenga 3 imágenes: una imagen Normal, una Imagen Presionada y una Imagen Inhabilitada (las usaré para crear botones de flecha arriba / abajo). Creo que el enfoque correcto sería derivar de Button y usar una Template y establecer disparadores para cambiar la imagen. Tengo 3 propiedades de dependencia, una para […]
¿Cómo inicializo std::array si T no es construible por defecto ? Sé que es posible inicializarlo así: T t{args}; std::array a{t, t, t, t, t}; Pero n para mí es el parámetro de la plantilla: template void f(T value) { std::array items = ??? } E incluso si no era una plantilla, es bastante feo […]
¿Se pueden usar cadenas C-Style como argumentos de plantilla? Lo intenté: template struct X { const char *GetString() const { return str; } }; int main() { X x; cout<<x.GetString(); } Y aunque no tengo quejas sobre la definición de clase, la instanciación produce ‘X’ : invalid expression as a template argument for ‘str’ (VC).