C ++ Почему черты недоступны для объектов, а доступны как переменные-члены stati c - PullRequest
0 голосов
/ 11 июля 2020

Насколько я понимаю, черты классов заключаются в том, что это класс, который инкапсулирует набор типов и функций, необходимых для шаблонных классов и шаблонных функций для управления объектами типов, для которых они созданы.

В следующем примере почему мы не можем использовать объявление 'gquiz :: container_type', иначе как мы узнаем черты gquiz:

int main()
{
    queue <int> gquiz;
    const queue <int>::container_type dq;
    //why not gquiz::container_type ?????
    cout << typeid(dq).name() << endl;
    gquiz.push(10);
    gquiz.push(queue <int>::value_type(20));
    gquiz.push(30);
}

1 Ответ

0 голосов
/ 11 июля 2020

Вы можете использовать

decltype(gquiz)::container_type

Действительно, если x::y означает эквивалент decltype(x)::y, когда x не является типом, может показаться проще, и я тоже (и держу пари, много других) тоже думал. Однако это не в стандарте, и причина в том, что ... потому что это не в стандарте, поэтому не работает.

Не каждое решение в C ++ имеет логическое обоснование, может быть это конкретное c одно имеет логическую причину, но я не могу ее придумать.

Может быть, просто нет причины.

С C ++ бывает. Много.

...