Некоторые классы cpp принимают в качестве входных данных Initializer_list, например:
std::map<std::string, int> m{{"CPU", 10}, {"GPU", 15}, {"RAM", 20}};
или
std::map<std::string, int> m = {{"CPU", 10}, {"GPU", 15}, {"RAM", 20}};
Возможно ли определить переменную Initializer_list, а затем использовать ее для вызова конструктора? то есть что-то вроде:
auto il = {{"CPU", 10}, {"GPU", 15}, {"RAM", 20}};
std::map<std::string, int> m = il;
@user7860670 user7860670, не могли бы вы подробнее объяснить, почему?
см. stackoverflow.com/questions/15286450
Да. Пример:
#include <initializer_list>
#include <map>
#include <string>
int main() {
std::initializer_list<std::pair<const std::string, int>> il = {
{"CPU", 10}, {"GPU", 15}, {"RAM", 20}};
std::map<std::string, int> m = il;
}
Да, это возможно. Вам нужно только явно указать тип значения списка инициализаторов.
#include <map>
#include <string>
int main() {
using map = std::map<std::string, int>;
auto il = {map::value_type{"CPU", 10}, {"GPU", 15}, {"RAM", 20}};
std::map<std::string, int> m = il;
}
или
#include <map>
#include <string>
#include <utility>
int main() {
auto il = {
std::pair<const std::string, int>{"CPU", 10}, {"GPU", 15}, {"RAM", 20}};
std::map<std::string, int> m = il;
}
Обратите внимание, что
initializer_list
— это прокси-объект, он фактически не содержит значений. Поэтому использовать его в качестве универсального хранилища для передачи вещей — не лучшая идея.