Re[5]: И снова про ц++
От: Sheridan Россия  
Дата: 03.02.12 12:21
Оценка:
Здравствуйте, x-code, Вы писали:

XC>Ну вот в C# вроде нормальная модульная система. Раздельная компиляция, но никаких include,

Ну да, include нет, есть using.
Matrix has you...
Re[5]: И снова про ц++
От: Andrey.V.Lobanov  
Дата: 03.02.12 12:37
Оценка: -1
Здравствуйте, Mamut, Вы писали:

AVL>>массовым погромистам гораздо проще развешивать лапшу прикрываясь всякими С# 100500 / мета- / фукнциональное программирование / лямбды / монады / linq / макросы / прочая фигня. а да, виртуальные машины забыл, тоже модная тема.

M>Выделенное — не лапша, а очень удобные инструменты. Которые — ВНЕЗАПНО — тоже появляются в С++
странно было бы, если бы человек, покусанный яблочным маркетингом, не утверждал, что вся это модная лапша не является удобной
расскажи что там внезапно появилось в плюсах (можно без лямбд, хотя кому они нужны там...), что тебя на капс пробило.
Re[6]: И снова про ц++
От: Sheridan Россия  
Дата: 03.02.12 12:41
Оценка:
Здравствуйте, x-code, Вы писали:


XC>Циклические include всякие.


aaa.h
#ifndef aaa
#define aaa
// пишем, не имея проблем с циклическими инклудами. Любая иде так делает сразу.
#endif aaa
Matrix has you...
Re[6]: И снова про ц++
От: Cadet  
Дата: 03.02.12 12:45
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>Ну да, include нет, есть using.


Отсутствие юзинга не помешает использовать нужный класс, а отсутствие инклюда помешает.
... << RSDN@Home 1.2.0 alpha 5 rev. 1495>>
Re[7]: И снова про ц++
От: x-code  
Дата: 03.02.12 12:57
Оценка: +2
Здравствуйте, Sheridan, Вы писали:

S>aaa.h

S>
S>#ifndef aaa
S>#define aaa
S>// пишем, не имея проблем с циклическими инклудами. Любая иде так делает сразу.
S>#endif aaa
S>


Любую программу можно написать на ассемблере. Но надо ли это делать?

Красота языка определяется отсутствием таких вот обходных путей (а это именно обходной путь!). Да, в данном случае обойти просто... но это в данном случае, вполне могут быть случаи и посложнее. Мне нужен язык, в котором вообще ничего не нужно обходить.
Re[10]: И снова про ц++
От: Banned by IT  
Дата: 03.02.12 13:01
Оценка: +1
Здравствуйте, x-code, Вы писали:

XC>Я хочу, чтобы строка в кавычках была просто объектом. Чтобы не было даже привязки к кодировке (utf16, utf8, windows...), к внутреннему устройству и т.д.

Добро пожаловать в реальный мир.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[6]: И снова про ц++
От: Banned by IT  
Дата: 03.02.12 13:01
Оценка:
Здравствуйте, x-code, Вы писали:

BBI>>Красота побоку. Главное чтоб задачи решил как надо. Существующая система include мне ещё ни разу не мешала, и showstopperом не была.

XC>Циклические include всякие.
Это лечится. Впрочем, циклических я давненько не видел.

XC>>>Все должно быть полноценными объектами, и числа, и строки. То есть должны быть вызовы вида 10.ToStr(), "Hello".ToUpper(), но при этом эти "объекты" должны оставаться простыми сущностями.

BBI>>Получится жуткий кадавр.
XC>При наличии методов-расширений все получится вообще элементарно. string ToStr(this int x) и т.д.
А чем не нравится конструктор string (int x)?

BBI>>Мы пишем системные вещи но goto только в plain С наблюдается, в основном потому что там RAII нету.

XC>В каком-нибудь ядре Linux наверняка немало goto. А оно написано на древнем Си.
Вот вот. А С++ то при чём. Использовать goto в современном c++ нет никакой необходимости.

XC>Простейший пример — если в функцию можно передать строку как адрес массива char*, то почему нельзя передать явный массив любых других объектов?

Объяви рядом да передай. Со строками это явный частный случай, бо частота использования зашкаливала.

XC>Или еще: если в классе можно объявить функцию (метод) и другой (вложенный) класс, в функции можно объявить вложенный класс, то почему в функции нельзя объявить вложенную функцию?

Я честно говоря уже не помню какое там было обоснование почему так не стали делать.

XC>>>Да пусть у меня всего 4 метода в классе, но я хочу разделить их в две группы, что не имею права?

BBI>>А как ты их потом будешь вызывать? Указывая namespace каждый раз? Сделаешь using namespace? Ну так а нахрена их тогда было разделять?
XC>Чтобы сгруппировать логически.
Это лучше сделать на стороне гуя.

XC>Вызывать — в основном, указывая namespace как часть имени каждый раз. Внутри namespace естественно не указываем.

Этож жутко неудобно.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[7]: И снова про ц++
От: Banned by IT  
Дата: 03.02.12 13:01
Оценка:
Здравствуйте, TimurSPB, Вы писали:

BBI>>То что мне вспоминается про тебя и пробелы и табы — исключительно "слова не мужа, но юнца".

TSP>Демагогия. Приплетать юнцов к пробелам, табам и С++

Ну а как ещё понять твои заявления про дебилов? Детский максимализм и только.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[8]: И снова про ц++
От: TimurSPB Интернет  
Дата: 03.02.12 13:11
Оценка:
BBI>Ну а как ещё понять твои заявления про дебилов? Детский максимализм и только.
Как моё полное отрицание использования табуляций при форматировании кода и не желание тратить на эти споры лишние буквы.
Make flame.politics Great Again!
Re[11]: И снова про ц++
От: x-code  
Дата: 03.02.12 13:33
Оценка:
Здравствуйте, Banned by IT, Вы писали:

XC>>Я хочу, чтобы строка в кавычках была просто объектом. Чтобы не было даже привязки к кодировке (utf16, utf8, windows...), к внутреннему устройству и т.д.

BBI>Добро пожаловать в реальный мир.

И как я могу в С++ одновременно иметь две разные константные строки в разных кодировках?
Re[7]: И снова про ц++
От: Sheridan Россия  
Дата: 03.02.12 14:16
Оценка:
Здравствуйте, Cadet, Вы писали:

S>>Ну да, include нет, есть using.


C>Отсутствие юзинга не помешает использовать нужный класс, а отсутствие инклюда помешает.

Отсутствие юзингов вообще?
Matrix has you...
Re[8]: И снова про ц++
От: Sheridan Россия  
Дата: 03.02.12 14:17
Оценка:
Здравствуйте, x-code, Вы писали:

XC>Красота языка определяется отсутствием таких вот обходных путей (а это именно обходной путь!). Да, в данном случае обойти просто... но это в данном случае, вполне могут быть случаи и посложнее. Мне нужен язык, в котором вообще ничего не нужно обходить.


Как страшно жить...
Еще раз: эту обертку делает IDE.
Matrix has you...
Re: И снова про ц++
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 03.02.12 15:04
Оценка: +1 :)
Здравствуйте, Sheridan, Вы писали:

S>Я вот читаю-читаю, но так и не могу понять — откуда у людей такая нелюбовь к ц++? Указатели? Да фигня это, на пару граблей наступить и рефлекс появится. Зато более шустрый софт получается.

S>Так все же?

Авторы библии FDG так и пишут — большинство людей не имеет опыта с указателями.

Я уже писал, что указатели это фенька которая сама по себе требует достаточно большой практики для правильного применения. Её нужно долбить до полного автоматизма, что бы быть в состоянии писать качественный код одним только мозжечком, иначе будут косяки во всём коде.

Соответсвенно многим тупо жалко времени на это долбление, тк. можно взять какой Питон и в пять строчек написать то же самое, что взлетит на раз.
Re[8]: И снова про ц++
От: hardcase Пират http://nemerle.org
Дата: 03.02.12 15:19
Оценка:
Здравствуйте, Sheridan, Вы писали:

C>>Отсутствие юзинга не помешает использовать нужный класс, а отсутствие инклюда помешает.

S>Отсутствие юзингов вообще?

Юзингов нет ваще.
C#
class Program
{
  static void Main() { System.Console.WriteLine("Hello world!"); }
}

Nemerle:
System.Console.WriteLine("Hello world!");
/* иЗвиНите зА неРовнЫй поЧерК */
Re[12]: И снова про ц++
От: Banned by IT  
Дата: 03.02.12 15:24
Оценка:
Здравствуйте, x-code, Вы писали:

XC>>>Я хочу, чтобы строка в кавычках была просто объектом. Чтобы не было даже привязки к кодировке (utf16, utf8, windows...), к внутреннему устройству и т.д.

BBI>>Добро пожаловать в реальный мир.

XC>И как я могу в С++ одновременно иметь две разные константные строки в разных кодировках?

http://en.wikipedia.org/wiki/C%2B%2B11#New_string_literals
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[2]: И снова про ц++
От: D.Lans Россия  
Дата: 03.02.12 15:28
Оценка:
А какой есть аналог у C++?
Re[7]: И снова про ц++
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 03.02.12 15:47
Оценка: -3
Здравствуйте, okman, Вы писали:

O>Допустим, для какой-то задачи мне нужны очень компактные, пусть и не быстрые, строки.

O>Стандартная std::string не подходит, так как на 32-битных системах весит "аж" 24 байта.
O>Зато есть CString (MFC), QString (Qt) и всякие велосипеды, при желании можно найти или
O>собрать реализацию с объектами размером в указатель.
O>Прелесть в том, что C++ позволяет выбирать.

Попроси что бы ктото убил тебя. Понавыбираете а потом интеграция превращается в переписывание.
Re[8]: И снова про ц++
От: Cadet  
Дата: 03.02.12 15:49
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>Отсутствие юзингов вообще?


Совершенно верно.
... << RSDN@Home 1.2.0 alpha 5 rev. 1495>>
Re[2]: namespace'ы в классах
От: Sheridan Россия  
Дата: 03.02.12 15:56
Оценка:
Здравствуйте, x-code, Вы писали:

XC>Невозможность создания namespace внутри класса (вспомните хотя-бы "главные оконные классы" разных библиотек — CWnd, QWidget... сотни методов, там разделение не помешало бы)


Ну если очень надо — можно и нарисовать, благо нетрудно. У меня — не программиста — ушло гдето минут 10...

#include <iostream>
using namespace std;

#define C_NAMESPACE_BASE(_base) m_##_base
#define C_NAMESPACE_BEGIN(_ns, _base) \
class class##_ns \
  { \
    private: \
      _base *C_NAMESPACE_BASE(_base); \
    public: \
      class##_ns(_base *v_##_base) { C_NAMESPACE_BASE(_base) = v_##_base; };
#define C_NAMESPACE_END(_ns) \
  }; \
  public: class##_ns *_ns;.

#define C_NAMESPACE_INIT(_ns) _ns = new class##_ns(this);
#define C_NAMESPACE_DELETE(_ns) delete _ns;

class Parent
{
  C_NAMESPACE_BEGIN(SubNS, Parent)
  void f() { cout << "Hi, " << C_NAMESPACE_BASE(Parent)->c()  << "!" << endl; }
  C_NAMESPACE_END(SubNS)

  C_NAMESPACE_BEGIN(OtherNameSpace, Parent)
  void f() { cout << "Hi, " << C_NAMESPACE_BASE(Parent)->c()  << "! This is other namespace :))" << endl; }
  C_NAMESPACE_END(OtherNameSpace)

  public:
  Parent() { C_NAMESPACE_INIT(SubNS) C_NAMESPACE_INIT(OtherNameSpace) };
  ~Parent() { C_NAMESPACE_DELETE(SubNS) C_NAMESPACE_DELETE(OtherNameSpace) }
  int c() { return 123; }
};

int main ()
{
  Parent *p = new Parent();
  p->SubNS->f();
  p->OtherNameSpace->f();
}


gate ~ # g++ example.cpp -o example
gate ~ # ./example
Hi, 123!
Hi, 123! This is other namespace :))


Другое дело что на ненавистных местными дефайнах.... Ну уж это я считаю что они ими пользоваться не умеют...
Matrix has you...
Re[3]: Ах, да. Реализацию забыл от объявления отделить
От: Sheridan Россия  
Дата: 03.02.12 16:01
Оценка:
Ну это несложно, перепишем так:

#include <iostream>
using namespace std;

#define C_NAMESPACE_BASE(_base) m_##_base
#define C_NAMESPACE_BEGIN(_ns, _base) \
class class##_ns \
  { \
    private: \
      _base *C_NAMESPACE_BASE(_base); \
    public: \
      class##_ns(_base *v_##_base) { C_NAMESPACE_BASE(_base) = v_##_base; };
#define C_NAMESPACE_END(_ns) \
  }; \
  public: class##_ns *_ns;.

#define C_NAMESPACE_INIT(_ns) _ns = new class##_ns(this);
#define C_NAMESPACE_DELETE(_ns) delete _ns;
#define C_NAMESPACE_PATH(_ns, _base) _base::class##_ns

class Parent
{
  C_NAMESPACE_BEGIN(SubNS, Parent)
  void f();
  C_NAMESPACE_END(SubNS)

  C_NAMESPACE_BEGIN(OtherNameSpace, Parent)
  void f();
  C_NAMESPACE_END(OtherNameSpace)

  public:
  Parent() { C_NAMESPACE_INIT(SubNS) C_NAMESPACE_INIT(OtherNameSpace) };
  ~Parent() { C_NAMESPACE_DELETE(SubNS) C_NAMESPACE_DELETE(OtherNameSpace) }
  int c() { return 123; }
};

void C_NAMESPACE_PATH(SubNS, Parent)::f()
{
  cout << "Hi, " << C_NAMESPACE_BASE(Parent)->c()  << "!" << endl;
}

void C_NAMESPACE_PATH(OtherNameSpace, Parent)::f()
{
  cout << "Hi, " << C_NAMESPACE_BASE(Parent)->c()  << "! This is other namespace :))" << endl;
}

int main ()
{
  Parent *p = new Parent();
  p->SubNS->f();
  p->OtherNameSpace->f();
}
Matrix has you...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.