Por qué funciona este código: template< typename T, std::enable_if_t<std::is_same::value, T>* = nullptr> void Add(T) {} template< typename T, std::enable_if_t<!std::is_same::value, T>* = nullptr> void Add(T) {} y puede distinguir correctamente entre estas dos llamadas: Add(1); Add(1.0); mientras que el siguiente código, si se comstack, ¿da como resultado la redefinición del error Add () ? template< typename […]
¿Cuál es la forma correcta de reenviar todos los constructores de los padres en C ++ 0x? He estado haciendo esto: class X: public Super { template X(Args&&… args): Super(args…) {} };
Estaba experimentando con C ++ 0x plantillas variadas cuando tropecé con este problema: template struct identities { typedef Args type; //compile error: “parameter packs not expanded with ‘…’ }; //The following code just shows an example of potential use, but has no relation //with what I am actually trying to achieve. template struct convert_in_tuple { […]
Estaba viendo la segunda parte de la charla CppCon2014 de Walter Brown sobre metaprogtwigción de plantillas , durante la cual discutió los usos de su novedosa construcción void_t . Durante su presentación, Peter Sommerlad le hizo una pregunta que yo no entendí del todo. (el enlace va directamente a la pregunta, el código en discusión […]
Me encuentro con un problema relacionado con el uso apropiado de enable_if y la especialización de plantillas. Después de modificar el ejemplo (por razones de confidencialidad), aquí hay un ejemplo comparable: Tengo una función llamada “menos” que comprueba si 1st arg es menor que 2nd arg. Digamos que quiero tener 2 tipos diferentes de implementaciones […]
Me gustaría llenar una matriz de enumeración usando constexpr. El contenido de la matriz sigue un cierto patrón. Tengo una enumeración que separa el conjunto de caracteres ASCII en cuatro categorías. enum Type { Alphabet, Number, Symbol, Other, }; constexpr Type table[128] = /* blah blah */; Me gustaría tener una matriz de 128 Type […]
¿Cuál es la diferencia entre las siguientes 3 llamadas para gun función de gun ? template void fun(Ts… vs) { gun(A::hun(vs)…); gun(A::hun(vs…)); gun(A::hun(vs)…); } Estoy interesado en una respuesta que explique las tres llamadas usando un ejemplo específico.
Si tengo std::tuple (donde el tipo es homogéneo), ¿hay una función stock o constructor para convertir a std::array ? Editar:: Pude hacerlo funcionar con código de plantilla recursivo (mi borrador de respuesta se publicó a continuación). ¿Es esta la mejor manera de manejar esto? Parece que habría una función de stock para esto … O […]
template void for_each_argument(F f, Args&&… args) { [](…){}((f(std::forward(args)), 0)…); } Recientemente apareció en isocpp.org sin explicación.
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), […]