Articles of c ++ c ++ 11

¿Qué hace este código de plantilla variadic?

template void for_each_argument(F f, Args&&… args) { [](…){}((f(std::forward(args)), 0)…); } Recientemente apareció en isocpp.org sin explicación.

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), […]

std :: fstream buffering versus manual buffering (¿por qué 10x de ganancia con buffer manual)?

He probado dos configuraciones de escritura: 1) almacenamiento intermedio Fstream: // Initialization const unsigned int length = 8192; char buffer[length]; std::ofstream stream; stream.rdbuf()->pubsetbuf(buffer, length); stream.open(“test.dat”, std::ios::binary | std::ios::trunc) // To write I use : stream.write(reinterpret_cast(&x), sizeof(x)); 2) almacenamiento en búfer manual: // Initialization const unsigned int length = 8192; char buffer[length]; std::ofstream stream(“test.dat”, std::ios::binary | […]

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 […]

TMP: ¿cómo generalizar un producto cartesiano de vectores?

Existe una excelente solución de C ++ (en realidad, 2 soluciones: recursiva y no recursiva), en un producto cartesiano de un vector de vectores enteros . Para fines de ilustración / simplicidad, centrémonos en la versión no recursiva . Mi pregunta es, ¿cómo se puede generalizar este código con plantillas para tomar una std::tuple de […]

Cómo devolver un std :: string.c_str ()

Tengo un método que devuelve el puntero de char constante. Hace uso de std::string y finalmente devuelve su c_str() char. const char * returnCharPtr() { std::string someString; // some processing!. return someString.c_str(); } Tengo un informe de la herramienta COVERITY que dice que lo anterior no es un buen uso. He buscado en Google y […]

Detectando constexpr con SFINAE

Estoy trabajando en la actualización de algunos códigos C ++ para aprovechar la nueva funcionalidad en C ++ 11. Tengo una clase de rasgo con algunas funciones que devuelven tipos fundamentales que la mayoría de las veces, pero no siempre, devuelve una expresión constante. Me gustaría hacer diferentes cosas dependiendo de si la función es […]

Especificando un tipo para todos los argumentos pasados ​​a la función variadic o a la función de plantilla variadica w / out usando array, vector, structs, etc.

Estoy creando una función (posiblemente función de miembro, no es que importe … ¿quizás sí?) Que necesita aceptar un número desconocido de argumentos, pero quiero que todos sean del mismo tipo. Sé que podría pasar una matriz o un vector, pero quiero poder aceptar la lista de argumentos directamente sin estructura adicional o incluso con […]

Llamar a una función para cada argumento de plantilla variadica y una matriz

Entonces tengo un tipo X : typedef … X; y una función de plantilla f : class void f(X& x_out, const T& arg_in); y luego una función g : void g(const X* x_array, size_t x_array_size); Necesito escribir una función de plantilla variadica h que haga esto: template void h(Args… args) { constexpr size_t nargs = […]

¿Cuál es el procedimiento de pedido parcial en la deducción de plantilla?

Leí sobre el estándar c ++ 11 pero no puedo entender bien el significado de lo siguiente. Por ejemplo, son muy preferidos. Se usan dos conjuntos de tipos para determinar el orden parcial. Para cada una de las plantillas involucradas, está el tipo de función original y el tipo de función transformada. [Nota: la creación […]