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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> (boost:function) Определить указатель на [new] 
:(
    Опции темы
featZima
Дата 12.9.2010, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 31.8.2008
Где: Украина, Харьков

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



Подскажите как определить указатель на функцию конструктор... Что-нибудь вроде такого:

Код

boost::function<someClass* ()> constructorToSomeClass;
constructorToSomeClass = operator new someClass();


p.s. хотелось бы получить указатель на функцию-конструктор данных объектов, то есть чтобы можно было потом делать так:

Код

someClass* some = constructorToSomeClass();


Это сообщение отредактировал(а) featZima - 12.9.2010, 23:41
PM MAIL WWW ICQ GTalk Jabber   Вверх
boostcoder
Дата 12.9.2010, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



поясни...
тебе нужен объект boost::function возвращающий указатель? или указатель на объект boost::function возвращающий указатель?
PM WWW   Вверх
bsa
Дата 13.9.2010, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



featZima, конструктор не создает объекты, он их инициализирует. Создает же оператор new (или автоматически в стеке). Поэтому тебе нужно сделать функцию, которая бы создавала объекты с помощью new. Кстати, я бы рекомендовал в этом случае еще использовать boost::shared_ptr... Чтобы хлопот было меньше.
PM   Вверх
featZima
Дата 13.9.2010, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 31.8.2008
Где: Украина, Харьков

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



Вариант с дополнительной функцией вполне работает, но хотелось бы покороче )
Код

class SomeClass
{
public:
    SomeClass() {};
    ~SomeClass() {};
};

SomeClass* constructorToSomeClass()
{
    return new SomeClass();
}

int main(int argc, char** argv) {
    boost::function<void* ()> func1;

    func1 = constructorToSomeClass;

    SomeClass* someClass = func1();

    return 0;
}



Это сообщение отредактировал(а) featZima - 13.9.2010, 00:28
PM MAIL WWW ICQ GTalk Jabber   Вверх
Earnest
Дата 13.9.2010, 06:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



Цитата(featZima @  13.9.2010,  00:35 Найти цитируемый пост)
p.s. хотелось бы получить указатель на функцию-конструктор данных объектов, то есть чтобы можно было потом делать так:

На конструктор нельзя получить указатель. Существует понятие "виртуальный конструктор", так это примерно то, что ты нарисовал, т.е. некоторая функция, которая умеет создавать и инициализировать объекты заданного класса\иерархии.
Вместо бустовых оберток можно использовать "обычные" указатели на функции (это ведь чаще всего глобальная функция или статическая). Это слегка быстрее, но все зависит от задачи. Если нужна универсальность сигнатур, то через буст (т.к. в function можно и метод класса, и статическую функцию с параметрами и прочая запихнуть). А если универсальность не нужна - обычный указатель сойдет. Но в любом случае отдельная функция нужна. Если сильно влом писать три строчки кода на класс, то можно соорудить макрос или шаблон.


--------------------
...
PM   Вверх
icecrashldr
Дата 13.9.2010, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
*


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

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



"виртуальный конструктор" -> называет "именованный конструктор", либо же строитель(фабрика).


featZima, НА что именно вы хотите получить указатель? 
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0747 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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