Есть ли хитрость, чтобы избежать ключевого слова `typename` внутри класса шаблона? - PullRequest
0 голосов
/ 27 октября 2019

Я пытаюсь добиться чего-то вроде следующего:

template <typename T>
class MyClass {
    struct nested {
        using OtherT = // Some type derived from T
    };

protected:
    // Any way to avoid `typename` here?
    typename nested::OtherT member;
};

Есть ли способ использовать типы, вложенные в struct / namespace / other, которые вычисляются из типа шаблона T, безиспользуя ключевое слово typename? Я открыт для объявления nested любым другим способом, его целью является только удержание типов.

Редактировать : причина, по которой я пытаюсь это сделать, заключается в том, что у меня будет целоеколлекция типов, полученных из T, уже видимых внутри MyClass, а затем тесно связанные варианты тех же типов внутри nested. Я надеюсь использовать nested, чтобы четко и кратко их различить. Эта ситуация будет появляться во многих местах кодовой базы, поэтому я надеялся не видеть typename везде, где упоминаются эти типы.

1 Ответ

3 голосов
/ 27 октября 2019

Не помещайте их в подобный тип. Если вам нужно их разделить, дайте им более понятное имя. Даже если бы ваш предпочтительный механизм работал, вам все равно пришлось бы добавлять имена к nested::. Так что просто включите эту часть имени и покончите с этим:

template <typename T>
class MyClass {
    using nested_OtherT = // Some type derived from T

protected:
    nested_OtherT member;
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...