versiones software php5 net informacion español descripcion c++ templates idioms typename c++14

c++ - software - php5



¿Cuál es el idioma de la plantilla<typename T, T t>? (2)

Estaba leyendo this y estaba tratando de entender de qué se trataba N3601 . Dijo que este idioma aparece mucho en una búsqueda en la web, pero no pude encontrar nada. Cuál es el

template<typename T, T t>

idioma, qué resuelve, cómo se usa, qué son los parámetros de la plantilla implícita y qué pretende corregir la propuesta.


El problema que se está resolviendo es deducir tipos de parámetros de tipo no tipo de plantilla.

Dado:

template<typename T> void foo(T); template<typename T, T> void bar();

es posible deducir T para foo (por ejemplo, foo(10) dará como resultado que se deduzca T como int ), pero no es posible deducir T para bar ( bar<10>() simplemente no se compilará, usted Hay que escribirlo como bar<int,10>() ).

N3601 propone corregir esto introduciendo la sintaxis:

template<using typename T, T> void bar();

lo que permitirá a la bar<10>() compilar y hacer que se deduzca el tipo T


La introducción del artículo es engañosa: el idioma es en realidad

template <typename T, T t>

Denota una plantilla que depende de un tipo T y un valor t de ese tipo. La notación es un poco pesada ya que en la mayoría de las situaciones el tipo podría deducirse del valor en sí.

P.ej

// the current definition notation template <typename T, T t> void f() { t.f(); }; //// the proposed definition notation //// the parameter t depends on an implicit typename parameter T // template <using typename T, T t> void f() { t.f(); }; struct foo { void f(){ // some computation } }; foo bar; int main(){ // the current instantiation notation f<foo,bar>(); //// the proposed instantiation notation //// we know that bar is of type foo, so we don''t need to specify it // f<bar>(); }

La propuesta trata de introducir un poco de "azúcar sintáctica" para que la notación sea más fácil de escribir.

Además, el ejemplo dado anteriormente es trivial en su descripción (y posiblemente incorrecto, ya que los parámetros de la plantilla deben ser constexpr ), pero el documento describe varias situaciones en las que la notación actual puede volverse bastante velluda, lo que reduce la legibilidad y la facilidad general de programación.