метод добавления C++ к классу определяется в заголовочном файле

Вам необходимо добавить прослушиватель событий в конструктор и самостоятельно обработать состояние видимости раскрывающегося списка. Попробуйте что-то вроде этого:

class Example extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      visible: false
    };

    window.addEventListener("scroll", this.closeMenu);
  }

  toggleMenu = () => {
    this.setState({ visible: !this.state.visible });
  };

  closeMenu = () => {
    this.setState({ visible: false });
  };

  render() {
    return (
      
    );
  }
}

Рабочий пример: https://codesandbox.io/s/2ovjzwqz9y [ 111]

11
задан Jonathan Leffler 30 October 2008 в 00:58
поделиться

6 ответов

Нет, но Вы могли добавить метод, который берет ссылку/указатель на класс CFun - у Вас просто не будет доступа к частным данным:

void Hello(CFun &fun)
{
    cout << "hello" << endl;
}

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

9
ответ дан 3 December 2019 в 05:14
поделиться

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

Если необходимо добавить функцию членства к классу, то любой, необходимо изменить определение класса (редактируют CFun.hpp), или получает новый класс из CFun и помещенный hello() там.

3
ответ дан 3 December 2019 в 05:14
поделиться

Самым близким аналогом к такой конструкции (добавляющий функциональность к предопределенным классам) в C++ является Шаблон "декоратор". Это не точно, что Вы после, но это может позволить Вам делать то, в чем Вы нуждаетесь.

2
ответ дан 3 December 2019 в 05:14
поделиться

Не к моему знанию. Хотя, Вы могли сделать некоторое временное парусное вооружение и сделать решение пространства-имен-y.

0
ответ дан 3 December 2019 в 05:14
поделиться

После размышления об этом Вы могли сделать что-то ужасное: Найдите некоторую функцию в CFun, который имеет тип возврата, который Вы хотите, и только упоминание однажды во всем заголовке. Скажем, void GoodBye().

Теперь создайте файл CFunWrapper.hpp с этим содержанием:

#define GoodBye() Hello() { cout << "hello" << endl; } void GoodBye()
#include "CFun.hpp"
#undef GoodBye

Затем только когда-либо включайте CFunWrapper.hpp вместо CFun.hpp.

Но не делайте этого, если нет некоторое действительно серьезное основание сделать так. Это чрезвычайно подвержено повреждению и даже не может быть возможно, в зависимости от содержания CFun.hpp.

1
ответ дан 3 December 2019 в 05:14
поделиться
class Party : class CFun

(Ваш party.cpp)

наследовал материал CFun, включая привет () функция.

Так...

Party p;
p.hello();

Нет?

0
ответ дан 3 December 2019 в 05:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: