Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Результаты опроса: Это полезная фича?
Да 2 40.00%
Нет 2 40.00%
Не знаю / мне все равно 1 20.00%
Голосовавшие: 5. Вы ещё не голосовали в этом опросе

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2011, 20:48   #1
Ivan_32
somewhere else
Участник клуба
 
Аватар для Ivan_32
 
Регистрация: 17.07.2008
Сообщений: 1,409
По умолчанию Сабклассирование базового типа - куда прислать идею для C++0x?

У меня вот идея появилась, что если бы можно было заставить компилятор считать строку "Hello world" в некоем конкретном случае( области видимости/модуле/пространстве имен ) принадлежащей например к типу String, а не char* / wchar* и соответственно все она бы наследовала все поведенческие законы этого базового типа.

По моему это было бы неплохой фичей, если все грамотно реализовать.
"Тяжело в учении, легко в бою" - А.В. Суворов
Ivan_32 вне форума Ответить с цитированием
Старый 25.04.2011, 21:15   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Для компьютера, "Hello world" - это просто набор битов. Ничего этот набор наследовать не будет. Куда Вы его впихнёте, там он и "жить" будет.
Не нравится какой-то тип данных, сделайте приведение к другому типу.
Если хотите изобретать велосипед, изобретайте. Флаг Вам в руки.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 25.04.2011, 21:57   #3
Ivan_32
somewhere else
Участник клуба
 
Аватар для Ivan_32
 
Регистрация: 17.07.2008
Сообщений: 1,409
По умолчанию

Цитата:
Для компьютера, "Hello world" - это просто набор битов. Ничего этот набор наследовать не будет. Куда Вы его впихнёте, там он и "жить" будет.
А я и не говорю о runtime-е, на этапе компиляции "Hello world" это совсем не набор битов.
Цитата:
Не нравится какой-то тип данных, сделайте приведение к другому типу.
Тогда получается мусорный синтаксис, например:

MyInt a=b*(MyInt)104.0+(MyInt)10.0;

Цитата:
Если хотите изобретать велосипед, изобретайте. Флаг Вам в руки.
Это лишь фича для упрощения работы с такими вещами. Если я хочу работать сугубо с MyInt, а не int, почему я должен везде ставить эти (MyInt)? К тому же схожие фичи и так уже есть, например тот же using namespace.
"Тяжело в учении, легко в бою" - А.В. Суворов

Последний раз редактировалось Ivan_32; 25.04.2011 в 22:02.
Ivan_32 вне форума Ответить с цитированием
Старый 25.04.2011, 23:22   #4
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от Ivan_32 Посмотреть сообщение
У меня вот идея появилась, что если бы можно было заставить компилятор считать строку "Hello world" в некоем конкретном случае( области видимости/модуле/пространстве имен ) принадлежащей например к типу String, а не char* / wchar* и соответственно все она бы наследовала все поведенческие законы этого базового типа.

По моему это было бы неплохой фичей, если все грамотно реализовать.
Спорная фича, думаю очень многие будут против ведь даже неявные привидения между базовыми типами как ругают (да и как это всё скажется на шаблонах?), хотя я бы был за).
Впрочем, с нынешней скоростью работы комитета, принято это будет году к 2020-му в лучшем случае.
А вообще идея очень похожа на пользовательские неявные привидения в Scala.
С другой стороны, в C++0x есть литералы определяемые пользователем, быть может этого будет достаточно для ваших нужд?
netrino вне форума Ответить с цитированием
Старый 26.04.2011, 02:04   #5
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Ivan_32
динамическую типизацию решил изобрести?

Код:
s = "Hello World".replace("o", "")
print s
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 26.04.2011, 06:36   #6
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от pproger Посмотреть сообщение
2Ivan_32
динамическую типизацию решил изобрести?

Код:
s = "Hello World".replace("o", "")
print s
Вот и я о том-же. Просто сразу не вспомнил как это называется. .
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 26.04.2011, 08:31   #7
Ivan_32
somewhere else
Участник клуба
 
Аватар для Ivan_32
 
Регистрация: 17.07.2008
Сообщений: 1,409
По умолчанию

Цитата:
2Ivan_32
динамическую типизацию решил изобрести?
Отнюдь. Для примера.
#define subclass(integer,MyInt);
после этой строки все целые литералы, традиционно определяемые компилятором как int, будут неявно приводится к типу MyInt - вот что я бы хотел видеть.
"Тяжело в учении, легко в бою" - А.В. Суворов
Ivan_32 вне форума Ответить с цитированием
Старый 26.04.2011, 14:20   #8
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Ivan_32
ну напиши пример, в котором будет показано "удобство" этой фичи
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 26.04.2011, 15:09   #9
Ivan_32
somewhere else
Участник клуба
 
Аватар для Ivan_32
 
Регистрация: 17.07.2008
Сообщений: 1,409
По умолчанию

Код:
class MyInt: private MyIntegerDatatypeWithUnusualSemantics;

int main()
{
	MyInt b;
	MyInt a=b*(MyInt)49+(MyInt)294;
	b=Foo(a);
	b.print();
}

MyInt Foo(MyInt input)
{
	MyInt a=GetSomething(2),b=GetSomething(1),c=GetSomething(0);
	a+=(MyInt)394.0*b+(MyInt)32.0;
	b/=(MyInt)3894.0+c;
	c*=b+(MyInt)394.0;
}
А если еще и следовать канону и делать все преобразования по человечески - через static_cast, то и вообще станет целая уйма лишнего кода. А объяви я в начале модуля какое-нибудь #define subclass(integer,MyInt);, я бы все время бы работал сугубо со своим типом и никаких приведений.

Правда, наверно, я бы мог обойтись и собственным литералом, хотя это и исключает возможность по человечески перегрузить string.
"Тяжело в учении, легко в бою" - А.В. Суворов

Последний раз редактировалось Ivan_32; 26.04.2011 в 15:12.
Ivan_32 вне форума Ответить с цитированием
Старый 26.04.2011, 15:26   #10
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Ivan_32
я просил тебя показать пример с ТВОЕЙ идеей (который покажет на конкретном коде в чем твой метод лучше), а не пример того, как тяжело и неудобно кастовать типы.

Код:
MyInt a=b*(MyInt)49+(MyInt)294;
определи конструктор с int параметром и перегрузи нужные тебе бинарные операторы. и никаких кастов

далее, если ты говоришь, что ЛИТЕРАЛ будет не встроенным типом, а твоим классом, то разумно делать так?
Код:
string s = 10.toString();
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance

Последний раз редактировалось pproger; 26.04.2011 в 15:31.
pproger вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как обратиться к полям базового класса? Azartov Общие вопросы C/C++ 13 03.07.2011 20:32
Delphi. Несколько программ базового уровня fantic.n00b1 Помощь студентам 1 03.07.2010 01:27
Создание своего класса на основе базового TControl Lich87 Общие вопросы C/C++ 1 22.06.2010 18:29
Куда отследить куда утекает память? TwiX Общие вопросы Delphi 6 02.03.2010 03:10
подскажите свежую идею для смо Барби Помощь студентам 3 30.10.2008 12:03