C ++ 0X 이니셜 라이저 목록 예제
-
05-09-2019 - |
문제
기존 코드 의이 예제가 C ++ 0X 이니셜 라이저 목록 기능을 활용할 수있는 방법을보고 싶습니다.
예제 :
#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 : 예제 1 : 예제 1 : 예제 1 : : 예제 1 : : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제 1 : 예제.
std::vector<Ask*> ui ={
AskString("Enter your name: ", 3, 25),
AskString("Enter your city: ", 2, 25),
Ask("Enter your age: ")
};
아니면 이와 같은 리터럴이 있어야합니까? :
2 : 예제 2 : 예제 2 : 예제 2 : : 예를 2 : 예를 실시 예제 2 : : : : : : : 예제 2 : : : 예제 2 : : : 예제 2 : : 예제 2 : 예제 2 : 예제 2 : 예제 2 : 예제.
std::vector<Ask*> ui ={
{"Enter your name: ", 3, 25},
{"Enter your city: ", 2, 25},
{"Enter your age: "}
};
그렇다면 AskString과 Ask의 차이는 어떻게 처리됩니까?
해결책
포인터를 요구할 때 마지막 예제는 허용되지 않지만 대신 로컬 임시 객체를 제공하려고 시도합니다.
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에서는 작동합니다.