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

Метапрограммирование С++ - статический конструктор (3 стр)

Страницы: 1 2 3 4 5 Следующая »
#30
20:17, 5 мар 2010

Kloun
  Давай что-нибудь из тЪру. Курнём.

#31
20:22, 5 мар 2010

Zefick
> Давай что-нибудь из тЪру. Курнём.
я уже предложил вариант... но он похоже затерялся, и сотался без внимания.

#32
21:17, 5 мар 2010

Kloun
  Если это было про struct _True и struct _False, то я не могу найти способа, как с их помощью и буз сайзофа решить проблему. Нужно предложить какой-то шаблон, который в качестве аргумента может инстанциироваться либо одной структурой, либо другой. Шаблоны пока вроде перегружать нельзя, хотя ожет в новом стандарте и можно будет, но использовать один вместо другого вряд ли. А sizeof - это операция, дающая целочисленный результат, который можно сравнивать с другими размерами и с помощью них заносить значения в enum-ы.

#33
21:49, 5 мар 2010

Zefick
> oun
> Если это было про struct _True и struct _False, то я не могу найти способа,
> как с их помощью и буз сайзофа решить проблему.
предположем

struct _True
{
static const bool_val = true;
};

тогда вместо sizeof нужно check_function<T>(0).bool_val

так пойдет?

#34
22:06, 5 мар 2010

ща попробую ченить тру =)
но sizeof юзают почти всегда, ибо выражение в сайз оф не вычисляется ( если это функция) ни на этапе компиляции и ран тайм, но возвращаемое значение учитываеться, т.е. метод может быть ваще без реализации или с косячными реализациями.

#35
22:30, 5 мар 2010

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

#36
22:39, 5 мар 2010

my.name
> не неполучается, без сайз оф он пытаеться вызвать функцию и получить результат
ща попробую. задача какая? если присутсвует метод необходимый, то нужно его вызвать?

#37
22:46, 5 мар 2010

если в классе есть статический метод с определеным названием то его вызвать

#38
23:13, 5 мар 2010

шаблоны в общем-то тем и хороши, что можно тупо вызывать методы по сигнатуре (со всеми возможными неявным преобразованиями типов аргументов и возвращаемого значения), не заботясь о том, статические они, виртуальные или в свою очередь шаблонные

могу лишь догадываться зачем понадобился именно статический фабричный метод : )

#39
23:41, 5 мар 2010

Опа! по-моему гораздо красивее! но короче - это полюбому. нету двух лишних структур =))

class A
{
public:
  static void StaticConstructor() // static
  {
    printf(__FUNCTION__ "\n");
  }
};

class B
{
public:
  void StaticConstructor() // not static
  {
    printf(__FUNCTION__ "\n");
  }
};

class C
{
public:
};

template <typename U, U> struct test_struct;

template<typename _Cls> void CallStaticConstructor(test_struct<void(*)(), _Cls::StaticConstructor>* a = 0)
{
  _Cls::StaticConstructor();
}

template<typename> void CallStaticConstructor(...)
{
}

int _tmain(int argc, _TCHAR* argv[])
{
  CallStaticConstructor<A>();
  CallStaticConstructor<B>();
  CallStaticConstructor<C>();

  return 0;
}
#40
23:44, 5 мар 2010

Sh.Tac.
> могу лишь догадываться зачем понадобился именно статический фабричный метод : )
чую синглетонами тут попахивает.... xD

ps.
я конечно задачу не решил, в том виде, в котором предполагалось. но альрернативный варинат тоже ничо. а главное ни каких разрывов sizeof-ов

#41
23:51, 5 мар 2010

Zefick
> > Ты наверное путаешь, что конкретный размер char зависит от реализации
> А по моему как раз только он и не зависит. Хотя не знаю, как с этим на всяких
> там контроллерах. Надеюсь скоро узнать.

Есть дурные процессоры, в которых минимальная размерность операнда 4-байта. В таком случае у нас sizeof(char) == sizeof(short) == sizeof(int) == sizeof(long) == 4. TI такие делал.

#42
23:54, 5 мар 2010

my.name

> template <typename U, U> struct test_struct;
> template<typename _Cls> void CallStaticConstructor(test_struct<void(*)(), _Cls::StaticConstructor>* a = 0)
> template<typename> void CallStaticConstructor(...)

вот этот грязный хак вообще откуда взялся? где до такого чуда додумался?

#43
23:56, 5 мар 2010

Kloun
> а главное ни каких sizeof-ов
преимущества sizeof() уже приводились, он на самом деле всё знает от типах (чтобы узнать размер, надо как минимум знать тип), плюс к тому же ни хрена не вычисляет (вернее не вызывает ничего из того, что указано как аргумент)

в новом стандарте уже должен вовсю typeof() использоваться, а пока костыли : )

З.Ы. Kloun
> где до такого чуда додумался?
Александреску однака : )

#44
0:29, 6 мар 2010

Sh.Tac.
> преимущества sizeof() уже приводились
да я не спорю, что он ничего не вычисляет. но не красиво опеределять наличие метода у класса, измеряя размер массива sizeof ом. какбэ сущности разные...
это грязный хак!

> в новом стандарте уже должен вовсю typeof() использоваться, а пока костыли : )
и когда новый стандарт дойдет до народа?

> Александреску однака : )
злой тип однака... грязный хацкер! пропагандист говнокода xDD. чтобы мы без него делали =((

Страницы: 1 2 3 4 5 Следующая »
ПрограммированиеФорумОбщее

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