Гость
Форумы / C++ [игнор отключен] [закрыт для гостей] / Автоматический alias для базового типа / 11 сообщений из 11, страница 1 из 1
10.02.2021, 19:27
    #40044145
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматический alias для базового типа
Когда мы пишем, например
Код: sql
1.
struct MyClass: public std::basic_string<unsigned char> {}


то теряем возможность обращаться к методам базового класса. То есть следующее даже не
скомпилируется:
Код: sql
1.
MyClass foo; foo.append("abc", 3);


И даже это не скомпилируется:
Код: sql
1.
MyClass foo; foo.append(reinterpret_cast<const unsigned char*>("abc"), 3);


Чтобы оно таки скомпилировалось, нам придётся добавить в объявление MyClass
Код: sql
1.
public: using std::basic_string<unsigned_char>::append;



Собственно вопрос: можно ли в этом месте как-то обойтись без полного припева
"std::basic_string<unsigned_char>"?
...
Рейтинг: 0 / 0
10.02.2021, 19:43
    #40044153
petrav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматический alias для базового типа
Dimitry Sibiryakov

Собственно вопрос: можно ли в этом месте как-то обойтись без полного припева
"std::basic_string<unsigned_char>"?

Я делаю так в подобных случаях:

Код: plaintext
1.
2.
3.
using Base = std::basic_string<unsigned_char>;

public: using Base::append;


Вы уверены, что ваши примеры не компилируются? Потому что у меня компилируются.
После приведения типа строки, конечно.
...
Рейтинг: 0 / 0
10.02.2021, 19:51
    #40044158
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматический alias для базового типа
petravВы уверены, что ваши примеры не компилируются?

Уверен.

petravПотому что у меня компилируются.

Возможно, тут роляет что у меня в классе ещё одна перегрузка append добавлена и это
выбивает унаследованные за пределы видимости.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
10.02.2021, 19:52
    #40044159
petrav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматический alias для базового типа
Почему вы решили, что после наследования нельзя вызывать методы базового класса?

В вашем коде другая проблема. Метод append(), по идее, должен вернуть MyClass&, а
вернёт std::basic_string&.
...
Рейтинг: 0 / 0
10.02.2021, 19:54
    #40044163
petrav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматический alias для базового типа
Dimitry Sibiryakov

Возможно, тут роляет что у меня в классе ещё одна перегрузка append добавлена и это
выбивает унаследованные за пределы видимости.

А ну это само собой. Метод append() в наследнике экранирует все перегрузки append() в базовом классе.
Так всегда было. Могу предложить:

Код: plaintext
1.
using Base::append;
...
Рейтинг: 0 / 0
10.02.2021, 20:03
    #40044172
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматический alias для базового типа
Да, походу придётся удовлетвориться
Код: sql
1.
2.
3.
4.
5.
typedef std::basic_string<unsigned char> ustring;
class foo: public ustring
{
   using ustring::append;
};


и надеяться, что комитет по извращениям когда-нибудь введёт
Код: sql
1.
class foo: public std::basic_string<unsigned char> alias ustring


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
10.02.2021, 20:29
    #40044187
petrav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматический alias для базового типа
И тем не менее append() у вас возвращает не то что нужно. По сути вы поломали логику класса.
...
Рейтинг: 0 / 0
10.02.2021, 23:07
    #40044222
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматический alias для базового типа
Наплевать, это мой класс и как я его использую - моё дело.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
10.02.2021, 23:49
    #40044227
a guest
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматический alias для базового типа
Dimitry Sibiryakov

Да, походу придётся удовлетвориться
Код: sql
1.
2.
3.
4.
5.
typedef std::basic_string<unsigned char> ustring;
class foo: public ustring
{
   using ustring::append;
};


и надеяться, что комитет по извращениям когда-нибудь введёт
Код: sql
1.
class foo: public std::basic_string<unsigned char> alias ustring


Похоже, что комитет не убедила необходимость в таком алиасинге .
Хотя вот за n2881 все голосовали "за" и никто "против".
...
Рейтинг: 0 / 0
11.02.2021, 00:18
    #40044233
petrav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматический alias для базового типа
a guest
Хотя вот за n2881 все голосовали "за" и никто "против".

Классно. А почему оно не компилируется?

Код: plaintext
1.
2.
3.
class Foo {};

class Bar: Base = public Foo {};
...
Рейтинг: 0 / 0
11.02.2021, 00:50
    #40044237
a guest
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматический alias для базового типа
petrav, дальше голосования на EWG, видимо, не пошло.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Автоматический alias для базового типа / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]