Pregunta

Me gustaría ver cómo este ejemplo de código existente sería capaz de tomar ventaja de la función de lista de inicialización C ++ 0x.

Example0:

#include <vector>
#include <string>
struct Ask {
    std::string prompt;
    Ask(std::string a_prompt):prompt(a_prompt){}
};
struct AskString : public Ask{
    int min;
    int max;
    AskString(std::string a_prompt, int a_min, int a_max):
        Ask(a_prompt), min(a_min), max(a_max){}
};
int main()
{
    std::vector<Ask*> ui;
    ui.push_back(new AskString("Enter your name: ", 3, 25));
    ui.push_back(new AskString("Enter your city: ", 2, 25));
    ui.push_back(new Ask("Enter your age: "));
}

¿Sería apoyar algo como esto:

Ejemplo 1:

std::vector<Ask*> ui ={
    AskString("Enter your name: ", 3, 25),
    AskString("Enter your city: ", 2, 25),
    Ask("Enter your age: ")
    };

o debe tener literales como este:?

Ejemplo 2:

std::vector<Ask*> ui ={
    {"Enter your name: ", 3, 25},
    {"Enter your city: ", 2, 25},
    {"Enter your age: "}
    };

Si es así cómo sería la diferencia entre AskString y Ask ser manejado?

¿Fue útil?

Solución

últimos ejemplos no se le permitiría lo que nos piden para los punteros, pero intenta proporcionar objetos temporales locales en su lugar.

std::vector<Ask*> ui ={
    new AskString{"Enter your name: ", 3, 25},
    new AskString{"Enter your city: ", 2, 25},
    new Ask{"Enter your age: "}
    };

que se permitiría y no habría ningún tipo de ambigüedad.

Eso sería correcto también:

std::vector<Ask*> ui ={
        new AskString("Enter your name: ", 3, 25),
        new AskString("Enter your city: ", 2, 25),
        new Ask("Enter your age: ")
        };

Y el ejemplo es más como:

std::vector<Ask> ui ={  // not pointers
    {"Enter your name: "},
    {"Enter your city: "},
    {"Enter your age: "}
    };

std::vector<AskString> uiString ={  // not pointers
    {"Enter your name: ", 3, 25},
    {"Enter your city: ", 2, 25},
    {"Enter your age: ", 7, 42}
    };

y otra vez no habría ninguna ambigüedad acerca de los tipos.

Otros consejos

A c ++ lista de inicialización es homogénea , lo que significa que debe tener todos del mismo tipo, por lo que el ejemplo # 2 está fuera. Si utilizó new en el ejemplo 1, que funcionaría.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top