LINUX.ORG.RU

Знатокам С/С++

 


0

2

Насколько я помню в некоторых языках позволяют объявить тип переменной аналогичным другой переменной/типу.
Ну т.е. не прописывать конкретный тип, а прописывать зависимый от переменной или типа.

Есть ли подвижки по этому весьма неплохому «синтаксическому сахару»?

★★★★★
Ответ на: комментарий от anonymous

Не всегда наши ощущения правильно истолковывают реальность. Пацан может ошибаться. А эксперт в силу характера не спорит с пацаном. Хотя часто бывает прав.

hibou ★★★★★
()
Ответ на: комментарий от anonymous

Так вот, у меня этих лишних имён 0, только имена структурок, которые и так есть по условию. У тебя лишних имён даже в хэлворде 2, а в не-хэлворде будут тысячи.

В том и дело, что имена эти не лишние. Использование там typedef вместо «typeof((person){}.name)» уменьшает необходимость в комментариях кода. Точно так же разбиение большой функции на две меньшие упрощает код не только потому, что в меньшей функции проще разобраться, а ещё и потому, что каждой из меньших функций можно дать осмысленное имя.

ЗЫ Но прикол в том, что даже ты не пишешь такой код, как тут предлагаешь. И никто, если только не троллинга ради, не скажет, что «тип(имя_поля(экземпляр_объекта(имя_типа)))» читается лучше, чем «имя_типа». А вот эти все попытки общаться в стиле Луговского, но без минимального опыта и с сомнительными тезисами, выглядят уныло.

Waterlaz ★★★★★
()
Ответ на: комментарий от eao197

Уверяю Вас, если бы вопрос был про «черепашку», то здешние эксперты умудрились сфокусироваться своим «вулканским взглядом» приложив кончики указательного и безымянного пальцев каждой руки к седым от безрассудства, фанатизма и безальтернативности вискам что бы «натянуть сову на глобус». Хорошей пятницы

anonymous
()
Ответ на: комментарий от anonymous

Да, да. В утверждении 5 > 4 все не так однозначно. Может быть тебе и хотелось бы перевернуть очевидные вещи с ноги на голову, но ты не настолько крутой манипулятор.

rumgot ★★★★★
()
Последнее исправление: rumgot (всего исправлений: 2)
Ответ на: комментарий от hibou

Пацан может ошибаться. А эксперт в силу характера не спорит с пацаном. Хотя часто бывает прав.

Ну да, мог бы, но просто не захотел. Только вот свидетельств за «мог» никаких нет, а вот против «мог» свидетельства есть. Каждый эксперт попытался, но не получилось.

Это даже на «не хотел» не спишешь. Не хотел бы - не пытался. А если попытался, но не получилось - значит не смог. А если не смог - «не хотел» уже не работает. Такие дела.

Вот ты уже правильнее делаешь - ноль конкретики по теме, с первого же поста заходишь с «я не хочу». Это тоже полная херня, потому как бегать по темам которые ты не хочешь обсуждать и писать там «я не хочу» - отборный аутизм. Но мазаться можно лучше.

anonymous
()
Ответ на: комментарий от Waterlaz

В том и дело, что имена эти не лишние.

Лишние.

Использование там typedef вместо «typeof((person){}.name)» уменьшает необходимость в комментариях кода.

Код «использовать тип такой же, как где-то в другом месте» не нуждается в комментариях. Это исходная постановка задачи, которая в точности выражается в коде. Ты там совсем заврался? Показывай комментарий, который там напишешь.

Уменьшить необходимость комментариев с нуля до больше нуля. Ты такой талантливый.

И да, как-то быстро ты переобулся. Рассказывал «комментарии лучше писать», а после того, как я рассказал о костыльности комментариев, ты начал пытаться уменьшить их количество. Второй пост подряд запутался в показаниях.

Точно так же разбиение большой функции на две меньшие упрощает код не только потому, что в меньшей функции проще разобраться, а ещё и потому, что каждой из меньших функций можно дать осмысленное имя.

ещё и потому, что каждой из меньших функций можно дать осмысленное имя.

Неверно. В общем, если кто не знал, вот это:

f(a, b, c, d) {
  a_add_b = a + b;
  a_add_b_mul_c = a_add_b * c;
  a_add_b_mul_c_sub_d = a_add_b_mul_c - d;
  return a_add_b_mul_c_sub_d;
}

проще чем это:

f(a, b, c, d) { return (a + b) * c - d; }

ведь мы разбили на меньшее и дали осмысленные имена.

ЗЫ Но прикол в том, что даже ты не пишешь такой код, как тут предлагаешь. И никто, если только не троллинга ради, не скажет, что «тип(имя_поля(экземпляр_объекта(имя_типа)))» читается лучше, чем «имя_типа». А вот эти все попытки общаться в стиле Луговского, но без минимального опыта и с сомнительными тезисами, выглядят уныло.

Подготовка к отступлению.

anonymous
()
Ответ на: комментарий от eao197

Не переживай, сам царь уже давно сюда не ходит. Тебе бы починить детектор.

Судя по всему началась атака. Сразу два новых эксперта с нулём конкретики по теме, а также попытки подсасываться друг к другу.

anonymous
()
Ответ на: комментарий от anonymous

Сложная теория вокруг не могу, не хочу… кстати, есть еще не умею и не знаю. У глухих в РЖЯ есть на это разные жесты. Но многие глухие путают, не могу, не умею и даже и не знаю, и не хочу. Бывает что выражают одним и тем же жестом. И бедным переводчикам приходится исходить из контекста. А ты прям целую теорию построил вкруг этого. А я так. гуманитарий, мимо-крокодил.

hibou ★★★★★
()
Ответ на: комментарий от anonymous

трёт указательный палец левой руки о указательный палец правой согласен, выглядит странно: перфоманс?

anonymous
()
Ответ на: комментарий от hibou

Но многие глухие путают, не могу, не умею и даже и не знаю, и не хочу.

Вот не путай, я тебе/экспертам даже немного помог с этим выше.

А я так. гуманитарий, мимо-крокодил.

Мимо-гуманитарий не пытается кому-то что-то рассказывать, не разбираясь в теме. Поэтому ты мимо-заагрившийся, а не мимо-гуманитарий.

anonymous
()
Ответ на: комментарий от hibou

Тебе? Не знаю как она должна помочь. А поможет разбираться в теме, либо не пытаться болтать, если уж понимания нет.

anonymous
()
Ответ на: комментарий от hibou

Ты перепутал свободу со вседозволенностью. Очень странно для гуманитария.

anonymous
()

думаю что за фигня и эти языки постоянно смешивают, везде это С/С++?
а потом мне подсказали - смотри как читается «сиси плюс плюс»
все, тайна раскрыта.

все бы вам сиськи, ёмаё!
а работать кто будет? работать надо!

olelookoe ★★★★
()
Ответ на: комментарий от anonymous

И да, как-то быстро ты переобулся. Рассказывал «комментарии лучше писать», а после того, как я рассказал о костыльности комментариев

Ого! Рассказал о костыльности комментариев? Чего ещё расскажешь?

Комментарии — хорошо, код, который «сам себя» комментирует — ваще хорошо.

Неверно. В общем, если кто не знал, вот это: ... проще чем это: ...

А если не доводить до абсурда и в случаях, когда у «a_add_b_mul_c» есть осмысленное название, то будет проще.

Но ты же утверждаешь, что пишешь вот так:

typedef struct { char* name; int age; } person;
typedef struct { typeof((person){}.name) name; typeof((person){}.age) age; } human;
typedef struct { typeof((person){}.name) name; typeof((person){}.age) age; } deathclaw;
typeof((person){}.name) getShortName(human* h){
   ... 
   // and many more tmp values with typeof((person){}.name) type, because we are too stupid to typedef
}
Проще чем:
typedef char* name_t;
typedef int age_t; 
typedef struct { name_t name; age_t age; } person;
typedef struct { name_t name; age_t age; } human;
typedef struct { name_t name; age_t age; } deathclaw;
name_t getShortName(human* h){
    ...
}

Подготовка к отступлению.

Ой, давай без этого. Ты знаешь, что ты не пишешь такой код, я знаю, что ты не пишешь такой код. Все тут знают, что ты не пишешь такой код, а дурачка строишь чисто потроллить.

Waterlaz ★★★★★
()
Ответ на: комментарий от anonymous

Неверно. В общем, если кто не знал, вот это:

f(a, b, c, d) {
  a_add_b = a + b;
  a_add_b_mul_c = a_add_b * c;
  a_add_b_mul_c_sub_d = a_add_b_mul_c - d;
  return a_add_b_mul_c_sub_d;
}

проще чем это:

f(a, b, c, d) { return (a + b) * c - d; }

Опять таки, ты уже прям явно делаешь вид, что не понимаешь, что имеется ввиду. Если для тебя всерьез вызывает сложности вопрос того, когда нужно разбивать функцию не несколько простых с осмысленнымим именами - то это звучит уж слишком шизово.

Подготовка к отступлению

Да, да. Ты то у нас каждый контраргумент в свою сторону учел, не то что аппоненты, которые игнорят «объективные аргументы».

Короче - это не про количество символов.

Это в фонд золотых цитат. И ты еще про отступление будешь бредить…

rumgot ★★★★★
()
Ответ на: комментарий от Waterlaz

Ты в курсе про теорию удвоенного времени Наки? Мне кажется тут напрашивается что-то такое от анонимуса:

«Не смотря на то, что количество символов в случае второго кода меньше, этот код (второй) длинее, т.к. в нем длина - это не только его собственное количество символов, но и также количество символов, которые не написаны по первому способу».

rumgot ★★★★★
()
Ответ на: комментарий от Waterlaz

Ого! Рассказал о костыльности комментариев? Чего ещё расскажешь?

Ого! Нечего ответить? Вот это поворот(нет).

Комментарии — хорошо, код, который «сам себя» комментирует — ваще хорошо.

Поплыл сменив методичку в полёте. Кстати, где тот комментарий, который нужен для typeof((person){}.name) name;? Ты кукарекал о его нужности и снижении этой нужности через typedef. Опять что-ли в лужу сел?

когда у «a_add_b_mul_c» есть осмысленное название, то будет проще.

Пример тебе дан - меняешь название и мы смотрим на эту простоту.

Проще чем:

Код не эквивалентный. Показывай происхождение name_t из peson. У меня оно есть, у тебя просто рандомный name_t, непонятно откуда взявшийся.

А уже далее я тебя помножу на ноль на тему копипасты, на которую ты пытаешься слиться.

Ой, давай без этого.

Нанёс херни и теперь «давай без этого». Гений маневрирования.

anonymous
()
Ответ на: комментарий от rumgot

Ты сел в лужу, отсветился, и теперь решил вылезти вновь, когда побежал табун? Тотальная несостоятельность.

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

Показывай, как эта херня следует из написанного мной.

Ты то у нас каждый контраргумент в свою сторону учел, не то что аппоненты, которые игнорят «объективные аргументы».

Да, каждый контраргумент был умножен на ноль. Листаем наверх и убеждаемся в этом.

Это в фонд золотых цитат.

В фонд твоей несостоятельности. Ты слишком слаб - это не моя проблема.

anonymous
()
Ответ на: комментарий от anonymous

Да, каждый контраргумент был умножен на ноль.

Да, да, умножен. Если под умножением теперь понимается «не-не, возьмем другой пример» или «меньше символов - это больше» и т.п. Умножатель мля.

В фонд твоей несостоятельности

Можешь плиз зарегаться, чтобы на тебя бирку повесить?

rumgot ★★★★★
()
Ответ на: комментарий от anonymous

когда побежал табун?

Ну да, когда все вокруг говорят:

  • Пацан, не писай против ветра в мороз…

Ты такой:

  • Вы лохи, не понимаете, тут уметь нужно…
rumgot ★★★★★
()
#include <iostream>

struct Person {
    std::string name;
    int age;
};

struct Human {
    using name_t = decltype(Person::name);
    using age_t  = decltype(Person::age);

    name_t name;
    age_t  age;

    Human(Person p) :
        name(p.name),
        age(p.age)
    {};
};

struct HumanDoneRight {
    Person p;
    HumanDoneRight(Person p):p(p) {};
};

int main(int argc, char *argv[])
{
    Person p = {"Vasya Pupkin", 20};
    Human h(p);
    std::cout << h.name << ": " << h.age << std::endl;
    return 0;    
}

  1. typedef не поддерживает шаблоны C++ и не может быть специфирован для класса/неймспейса. Используйте using.

  2. Используйте композицию. Если у вас одинаковые данные используются в разных классах, то это может быть признаком неправильного дизайна.

necromant ★★
()
Ответ на: комментарий от necromant
using name_t = decltype(Person::name);
using age_t  = decltype(Person::age);

Так красивее. Но мне больше нравится вариант с тем, чтобы вынести объявление типа отдельно и не привязываться к конкретным членам.

Плюс также не забываем:

  • Инициализировать инты;
  • Не ставить лишние точки с запятой (;);
  • return 0 в main не обязателен.
rumgot ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.