статическая инициализация unordered_map с объединениями - PullRequest
1 голос
/ 25 июня 2019

Следующий статический список инициализаторов M завершается неудачно, но N успешно, кажется, я не могу понять, как выполнить инициализацию unordered_map, когда объединение из трех указателей const char * добавлено в список инициализации.Я попробовал.запись о доступе к полям союза и самого союза безрезультатна.

#include <iostream>
#include <unordered_map>
#include <iterator>

struct C {
    int j;
    int i;
};

struct D {
    int j;
    char c;
};

struct E {
    const char *a;
    const char *b;
    const char *c;
}e;

struct A {
    const char *s;
    union {
        C c;
        D d;
        E e;
    } u;
};

std::unordered_map<unsigned int, A> m ({
        {1, {"tom",53,'o'}},
        {2, {"ming",40,41}},
        {3, {"peter","a","b","c"}} });

std::unordered_map<unsigned int, A> n ({
        {1, {"tom",53,'o'}},
        {2, {"ming",40,41}} });,

int main(void) {
    for ( const auto& i : m) {
        const auto& j = i.second;
        if (i.first == 1)
            std::cout << "key: " << i.first << " value: " << j.u.d.j << ":" << j.s << ":" << j.u.d.c << std::endl;
        else if (i.first == 2)
            std::cout << "key: " << i.first << " value: " << j.u.c.j << ":" << j.s << ":" << j.u.c.i << std::endl;
        else if (i.first == 3)
            std::cout << "key: " << i.first << " value: " << j.u.e.a << ":" << j.s << ":" << j.u.e.c << std::endl;
    }

    for ( const auto& i : n) {
        const auto& j = i.second;
        if (i.first == 1)
            std::cout << "key: " << i.first << " value: " << j.u.d.j << ":" << j.s << ":" << j.u.d.c << std::endl;
        else if (i.first == 2)
            std::cout << "key: " << i.first << " value: " << j.u.c.j << ":" << j.s << ":" << j.u.c.i << std::endl;
    }

    return 0;
}

Ошибка: map.cpp: 41: 32: ошибка: нет соответствующей функции для вызова 'std :: unordered_map :: unordered_map ()'

...