سؤال

أود أن أرى كيف سيتمكن هذا المثال من التعليمات البرمجية الموجودة من الاستفادة من ميزة قائمة C ++ 0x Oriticizer.

المثال0:

#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: "));
}

هل يدعم شيئا مثل هذا:

مثال 1:

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

أو يجب أن يكون لها حرفي مثل هذا؟:

مثال:

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

إذا كان الأمر كذلك كيف سيكون الفرق بين Askstring وأطلب التعامل معه؟

هل كانت مفيدة؟

المحلول

لن يسمح لك الأمثلة الأخيرة لأنك تطلبها المؤشرات ولكن حاول تقديم كائنات مؤقتة محلية بدلا من ذلك.

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

سيتم السماح به ولن يكون هناك غموض من النوع.

سيكون ذلك صحيحا أيضا:

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

ومثالك أكثر مثل:

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}
    };

ومرة أخرى لن يكون هناك غموض على الأنواع.

نصائح أخرى

قائمة التهيئة C ++ هي تجانس, ، وهذا يعني أنه يجب أن يكون كل نفس النوع، لذلك مثال # 2 خارج. إذا استخدمت new على سبيل المثال 1، وسوف تعمل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top