Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> задача на собеседовании 
:(
    Опции темы
Paspartu
Дата 18.6.2010, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 3.5.2007

Репутация: нет
Всего: нет



Доброго времени суток!
Вот получил такую задачу:

//*******************************************************************************************************
Есть классы C1, С2, С3..... СN  с функциями 
F1, F2, F3, ..... , FN

Прототипы функций могут быть разными(максимальный набор параметров = 2 штуки, типы параметров неизвестны)

Задача: 
1.       Организовать контейнер, элементами которого будут пары: один из экземпляров класса Cx и одна из функций Fx
2.       Написать цикл, который пробегается по элементам контейнера и вызывает нужные методы
(параметры этих функций задаются на этапе добавления объекта в контейнер) соответствующих экземпляров класса

Ограничения:
Нельзя использовать bost, qt,  можно только stl
Метод четкого вызова функций путем case, if - применять нельзя
Напрямую рассчитывать адрес вызываемой функции нельзя

Дополнение:
                Использует один человек, разрабатывает контейнер другой человек (он ничего не знает ни о классах C ни о 
возможном количестве функций F и их параметров)

//*******************************************************************************************************

Помогите, перевести ее на русский язык… 
1. Не могу понять функции F1, F2, F3, ..... , FN это члены класса или как?
Просто мне интересно, как ее помете вы…

PM MAIL   Вверх
Paspartu
Дата 18.6.2010, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 3.5.2007

Репутация: нет
Всего: нет



1.       Организовать контейнер, элементами которого будут пары: один из экземпляров класса Cx и одна из функций Fx
- вроде Fx - не является членном класса, НО!

2.       Написать цикл, который пробегается по элементам контейнера и вызывает нужные методы
(параметры этих функций задаются на этапе добавления объекта в контейнер) соответствующих экземпляров класса
- если опустить то что в скобках получаем:
Написать цикл, который пробегается по элементам контейнера и вызывает нужные методы соответствующих экземпляров класса
- выходит что они являются членнами класса!

Или я туплю...
PM MAIL   Вверх
Abyx
Дата 18.6.2010, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 1
Всего: 10



если речь о С++0х, то там в stl есть function и bind
если речь о С++98, то пишем их сами

Добавлено @ 22:09
Код

class AbstractFunction
{
public:
    virtual void invoke() = 0;
    //virtual ~A() {};
}
template<class T>
class Function0 : AbstractFunction
{
public:
   typedef void(T::*f_t)();
   Function(T* t, f_t f) : t_(t), f_(f) {}
   void invoke() {(t_->*f)();}
private:
   T* t_;
   f_t f_;
}
template<class T, typename A1>
class Function1 : AbstractFunction
{
public:
   typedef void(T::*f_t)(A1);
   Function(T* t, f_t f, A1 a1) : t_(t), f_(f), a1_(a1) {}
   void invoke() {(t_->*f)(a1_);}
private:
   T* t_;
   f_t f_;
   A1 a1_;
}

class Container
{
public:
//.......

template<class T>
void append(T* t, Function0<T>::f_t f)
{
     impl_.push_back(new Function0<T>(t, f));
}
template<class T, typename A1>
void append(T* t, Function1<T>::f_t f, A1 a1)
{
     impl_.push_back(new Function1<T>(t, f, a1));
}

private:
     vector<AbstractFunction*> impl_;
}


Это сообщение отредактировал(а) Abyx - 18.6.2010, 22:10
PM MAIL   Вверх
Paspartu
Дата 19.6.2010, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 3.5.2007

Репутация: нет
Всего: нет



Abyx, спасибо, но у тебя в результате получился вектор указателей, а исходя из условия задачи в векторе(контейнере) должен жить сам объект...
возможно ли запихнуть в вектор объекты разных классов? Или возможно ли инстанцировать вектор шаблоном? т.е. изночально создать некую шаблонную структуру в которой будет сам объект, указатель на его функцию и параметры, затем эту структуру запихивать в вектор?

PM MAIL   Вверх
borisbn
Дата 19.6.2010, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Stl-контейнеры не могут хранить объекты типов, которые нельзя привести друг к другу.
Ключевым словом в задании является: "Организовать" (читай "создать", "разработать") контейнер ...

P.S. IMHO тут ни boost ни Qt не помогут


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
mes
Дата 19.6.2010, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Paspartu @  19.6.2010,  14:46 Найти цитируемый пост)
, а исходя из условия задачи в векторе(контейнере) должен жить сам объект...

Цитата(Paspartu @  18.6.2010,  19:19 Найти цитируемый пост)
, элементами которого будут пары: один из экземпляров класса Cx и одна из функций Fx





--------------------
PM MAIL WWW   Вверх
bsa
Дата 19.6.2010, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Это можно сделать сделав свой аналог std::list, элементами которого будут объекты шаблонного класса, наследника от базового элемента:
Код
struct BaseElement
{
    virtual ~BaseElement(){}
    virtual void invoke() = 0;
    BaseElement *prev;
    BaseElement *next;
};

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0741 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.