Especialización explícita fuera del alcance del espacio de nombres: un error en los miembros de clase no estándar para la generación de código eficiente. Sin embargo, la colocación de especializaciones explícitas es crucial, como lo demuestra el siguiente fragmento del código:
plantillaCuando se compila con G, este código da como resultado el error:
templateEspecialización explícita en el alcance de Namespace 'class cConstraint'class CConstraint { // ... template void Verify(int position, int constraints[]) { } template void Verify (int, int[]) { } };
para comprender este error, necesitamos examinar el estándar C, que dicta que las especializaciones expícitas deben ser declaradas dentro del espacio de nombres de la que la plantilla es una plantilla. En el ejemplo anterior, CConstraint no se declara dentro de ningún espacio de nombres y, por lo tanto, la especialización explícita de Verify
templateVC Los compiladores, sin embargo, no cumplen en este caso, permitiendo especializaciones explícitas fuera del alcance del espacio de nombres. Este comportamiento no es estándar y no debe basarse.class CConstraint { // ... template void Verify(int position, int constraints[]) { } template void Verify (int, int[]) { } };
solución:
para resolver este problema y garantizar el cumplimiento del estándar C, las especializaciones explícitas deben declararse dentro del mismo espacio de nombres que la plantilla que se especializan. Aquí hay una versión corregida del código:
Namespace MyNamespace { plantillaencapsulando ccentraint en el espacio de nombres de mynamespace, nos aseguramos de que sus especializaciones explícitas también se declaren dentro de ese espacio de nombres, resolviendo el error de compilación.
templateademás, ya que c 03 prohíbe especializar la función de los miembros sin el enfoque de la clase, también lo que sugiere un enfoque gratuito. Respuesta:class CConstraint { // ... template void Verify(int position, int constraints[]) { } template void Verify (int, int[]) { } };
Namespace Detalle { plantilla
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3