Войти
ПрограммированиеФорумОбщее

Указатели на функции-члены классов (комментарии) (11 стр)

Страницы: 110 11 12 1317 Следующая »
#150
2:56, 6 мар. 2013

Grey304
> Частичное применение бы.. Хотя бы для первого параметра функции.
ды можно, но будет очень много кописпасты, как с макросами для делегатов но больше в несколько раз. с вариадиками было бы проще, но вот договорились не юзать их.


#151
4:42, 6 мар. 2013

интересно что делать, если надо будет забиндить функцию void  foo()?

#152
5:10, 6 мар. 2013

EnkiduTI
> интересно что делать, если надо будет забиндить функцию void  foo()?

Delegate< void() > lv_Delegate

#153
8:54, 6 мар. 2013

Chaos_Optima
> lv_Delegate

auto MyCreateThead=CreateThead(CREATE_SUSPENDED | STACK_SIZE_PARAM_IS_A_RESERVATION)(n*ln(n))
MyCreateThead(lpStartAddress, lpParameter, dwCreationFlags, &lpThreadId);

//Boost, C++11:
auto MyCreateThead1=boost::bind(CreateThead, CREATE_SUSPENDED | STACK_SIZE_PARAM_IS_A_RESERVATION, n*ln(n), _1, _2, _3, _4);
MyCreateThead1(lpStartAddress, lpParameter, dwCreationFlags, &lpThreadId);

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

И ещё интересно, boost::make_function когда-нибудь появится? Хотя в большинстве случаев вывести сигнатуру он не сможет.

#154
21:12, 6 мар. 2013

Kartonagnick
От тебя делагатов ждать?

#155
22:52, 6 мар. 2013

Chaos_Optima
> От тебя делагатов ждать?

Да.

#156
22:33, 8 мар. 2013

Kartonagnick
Где же твои делегаты?

#157
15:35, 10 мар. 2013

Kartonagnick
прошло уже 4 дня 2 из которых выходные + не законченный этот выходной. (( ты меня печалишь

#158
15:45, 10 мар. 2013

Chaos_Optima
> > От тебя делагатов ждать?
> Да.
Он предложил вам ждать, но не сказал, что планирует сделать делегаты. Так что продолжайте ждать до исхода дней.

Кстати, а в чем спор? Он с помошью своих коннекторов делает делегаты, а вы с помошью своих рук? Если так, то это объяснило бы задержку. (:

#159
15:54, 10 мар. 2013

laMer007
> Кстати, а в чем спор?
он утверждает что сделает обобщённые делегаты без применения шаблонов, ну точнее пользователю этих делегатов не придётся по средству шаблонов указывать сигнатуру, и утверждает что это будет удобнее  нежели делегаты на подобии std::function. И мы договорились, я пишу подобие std::function он пишет свои делегаты, оба пишем по 2003 стандарту, из библ разрешено применять только STL. В комплект должны походить примеры использования.
Мои делегаты обеспечивают единую сигнатуру вызова, при этом к моим делегатам можно привязать как обычные функции, так и методы, и функторы, также мои делегаты обеспечивают отсутствие лишнего копирования при передаче аргументов )) наверно сейчас обновлю версию, добавлю дополнительное поведения для классов унаследованных от SafeDelegate

#160
18:39, 12 мар. 2013

Kartonagnick
Гдеже твои делегаты ужо столько времени прошло, засчитываем слив?

#161
23:55, 12 мар. 2013

Chaos_Optima
> Chaos_Optima
я тут запустил кое как твои делегаты, VS2005. Проект не смог открыть, но думаю это из-за того что ты в более поздней студии делал. Подключил ручками, вываливает куча ошибок смысл которых в след
в файле Delegate.h

#pragma once

namespace Functions
{
  template<class sign>
  class Delegate;

  #define  T_ARGS
  #define ARGS 
  #define  D_ARGS
  #define  V_ARGS
  #include "Delegate.spec.h"
  #undef T_ARGS
  #undef ARGS 
  #undef D_ARGS
  #undef V_ARGS
инклюдят Delegate.spec.h, а там
#include "Type.h"

namespace Functions
{
тот же namespace, пришлось каментить, если даже так задумано, то как то не логично, были бы где нить в detail

как ток разобрался с этим, интересно было запустить Функцию которая принимает в себя указатель на функцию

void foo( void ( * fptr ) )
{
}
заглохло наглухо при компиляции
typedef void ( * fptr )();
Delegate< void ( fptr ) > lv_Error = &foo;
думаю для функций мемберов будет тоже самое
Также захотелось посмотреть как будет ругаться при бинде какого нить __fastcall
void __fastcall foo2()
{
}
не компилит
Delegate< void () > lv_Error2 = &foo2;
ну лан, это хоть ожидаемо, хотя смотря на код, гладко подархитектурить это не понятно как, либо переорганизовывать всю кухню... либо хз как

Но самый эпик файл я получил в след примере, из-за чего собственно и захотелось посмотреть, особенно после слов
Chaos_Optima
> также мои делегаты обеспечивают отсутствие лишнего копирования при передаче
> аргументов
создал класс, тупо смотреть сколько там у тебя промежуточных копирований :)

struct Nail
{
  int * ptr;

  ~Nail()
  {
    delete  [] ptr;
    ptr = NULL;
    cout << "dctor" << std::endl;

  }
  Nail()
    : ptr( new int[ 1024 ] )
  {
    cout << "default ctor" << std::endl;
  }

  Nail( const Nail & rhs)
    : ptr( new int [ 1024 ] )
  {
    cout << "copy ctor" << std::endl;
  }

  Nail &  operator = ( const Nail & rhs )
  {
    if( this != & rhs )
    {
      ptr = new int [ 1024 ];
      cout << "operator =" << std::endl;
    }
    return  * this;
  }

};
создал функцию "заразу"
void bar( Nail n )
{
  cout << "bar" << std::endl;
}

далее где то в коде объявил делегата

Delegate< void ( Nail ) > lv_Error = &bar;
далее запустил
Nail n;
lv_Error( n );
вывод в консоль
default ctor
copy ctor
copy ctor
copy ctor
bar
dctor
dctor
dctor
dctor

омг! :)

#162
23:57, 12 мар. 2013

да, через typedef сигнатуру не отлавливает, надо ему подавать без *
типо typedef void ( fptr_type * )(), привередливый :)

#163
16:33, 13 мар. 2013

EnkiduTI
> я тут запустил кое как твои делегаты, VS2005. Проект не смог открыть, но думаю
> это из-за того что ты в более поздней студии делал. Подключил ручками,
> вываливает куча ошибок смысл которых в след
в 2008 делал
EnkiduTI
> создал класс, тупо смотреть сколько там у тебя промежуточных копирований :)
да там проблема в том что размер класса должен превышать 8 байт, иначе передаётся по значению просто нехотелось заморачиватся и выписывать стандартные значения )) поправлю.
EnkiduTI
> типо typedef void ( fptr_type * )(), привередливый :)
есесено ))
ок сёня поправлю и залью уже в более нормальном виде
пасиб за отзыв.

#164
18:45, 13 мар. 2013

Chaos_Optima
> да там проблема в том что размер класса должен превышать 8 байт, иначе
> передаётся по значению просто нехотелось заморачиватся и выписывать стандартные
> значения )) поправлю.
угу, я это видел :) чтобы это норм подправить надо почти весь type_traits переписать
а объекты могут еще возвращаться! я не смотрел, что там происходит, но судя из логики общей, он его обернет в ссылку если он будет более 8 байт ? и будет ругаться на возврат ссылки локального объекта ?
Вот чтобы это норм заработало, должен быть свой плейс холдер, который не определяет что надо по функциям передавать, а что надо использовать для локальной передачи нуждами имплементации делегата, тогда промежуточных копирований не будет. А когда появиться такой вот плейсхолдер, то окажется что его можно сувать в разном порядке, тоесть появиться бустовский маджик

Страницы: 110 11 12 1317 Следующая »
ПрограммированиеФорумОбщее

Тема в архиве.