powered by simpleCommunicator - 2.0.19     © 2024 Programmizd 02
Map
Форумы / C++ [игнор отключен] [закрыт для гостей] / Автоматический alias для базового типа
11 сообщений из 11, страница 1 из 1
Автоматический alias для базового типа
    #40044145
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда мы пишем, например
Код: 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
Автоматический alias для базового типа
    #40044153
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

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

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

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

public: using Base::append;


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

Уверен.

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

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

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

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

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

Код: plaintext
1.
using Base::append;
...
Рейтинг: 0 / 0
Автоматический alias для базового типа
    #40044172
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


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Автоматический alias для базового типа
    #40044187
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И тем не менее append() у вас возвращает не то что нужно. По сути вы поломали логику класса.
...
Рейтинг: 0 / 0
Автоматический alias для базового типа
    #40044222
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наплевать, это мой класс и как я его использую - моё дело.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Автоматический alias для базового типа
    #40044227
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Автоматический alias для базового типа
    #40044233
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest
Хотя вот за n2881 все голосовали "за" и никто "против".

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

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

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


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