LINUX.ORG.RU

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

И как? Я не понимаю, вот какой вариант рассматриваю, но не компилируется.

#include <iostream>
class Foo {
  public:
    static Foo* e ( )
    {
      std::cout << "1" << " ";
      return *this;
    }

    static void d ( )
    {
      std::cout << "2" << std::endl;
    }
};

int main ( )
{
  Foo *f = new Foo();
  f->e()->d();
}

u0atgKIRznY5
() автор топика
Ответ на: комментарий от samson

А всё, сделал. вот.

#include <iostream>
class Foo {
  public:
    Foo* e ( )
    {
      std::cout << "1" << " ";
      return this;
    }

    static void d ( )
    {
      std::cout << "2" << std::endl;
    }
};

int main ( )
{
  Foo *f = new Foo();
  f->e()->d();
}

u0atgKIRznY5
() автор топика
Ответ на: комментарий от samson

А почему у меня работает только такой код

f.e()->d();
Вот весь код
#include <iostream>
class Foo {
  public:
    Foo *e ( )
    {
      std::cout << "1" << " ";
      return this;
    }

    static void d ( )
    {
      std::cout << "2" << std::endl;
    }
};

int main ( )
{
  Foo f;
  f.e()->d();
}

u0atgKIRznY5
() автор топика
Ответ на: комментарий от samson

Потому что возвращается указатель, и уже как от указателя пишется f->d()?

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

А почему у меня работает только такой код

Потому, что f не указатель.

RazrFalcon ★★★★★
()

Непонятно, зачем тебе вообще указатели, когда можно обойтись ссылками и писать f.e().d()

Softwayer ★★
()

самым наглядным примером может служить cout<< «one» << «two»

а выглядеть изнутри это должно как то так:

#include <iostream>

struct MyStream {

  template<typename T_anything>
  MyStream& operator << (T_anything any) {
    std::cout << any;
    return *this;
  }
};

int main() {
  MyStream mystream;
  mystream << "one " << "two " << "int: " << (int)15 << "\n";
  return 0;
}
samson ★★
()

Возвращатьуказатель на класс. Не обязательно this.

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

Согласен, так тоже можно. Кстати вопрос. Вот когда auto используется с шаблонными выражениями с указанием типа(как ты написал) - это удобно. Но когда auto используется при объявлении переменной и тут же ей присваивается результат вызова функции или метода без указания типа (как в случае с шаблоном). Поэтому читая такой код сразу не понятно, какой тип у такой переменной. Что думаешь по этому поводу?

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

А в этом дело... Ну разумеется лучше с оберткой, но для упрощения изложения материала можно и так.

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

Безусловно. Но тут речь о владении самыми элементарными навыками типа работы с памятью. C++ предоставляет гораздо больше возможностей выстрелить себе в ногу, нежели plain C

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

Я за бан.

#include <iostream>
class Foo {
public:
    Foo* operator->() { return this; }
    
    Foo *e ( )
    {
        std::cout << "1" << " ";
        return this;
    }
    
    static void d ( )
    {
        std::cout << "2" << std::endl;
    }
};

int main ( )
{
    Foo f;
    f->e()->d();
}
anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.