Kloun
Давай что-нибудь из тЪру. Курнём.
Zefick
> Давай что-нибудь из тЪру. Курнём.
я уже предложил вариант... но он похоже затерялся, и сотался без внимания.
Kloun
Если это было про struct _True и struct _False, то я не могу найти способа, как с их помощью и буз сайзофа решить проблему. Нужно предложить какой-то шаблон, который в качестве аргумента может инстанциироваться либо одной структурой, либо другой. Шаблоны пока вроде перегружать нельзя, хотя ожет в новом стандарте и можно будет, но использовать один вместо другого вряд ли. А sizeof - это операция, дающая целочисленный результат, который можно сравнивать с другими размерами и с помощью них заносить значения в enum-ы.
Zefick
> oun
> Если это было про struct _True и struct _False, то я не могу найти способа,
> как с их помощью и буз сайзофа решить проблему.
предположем
struct _True
{
static const bool_val = true;
};
тогда вместо sizeof нужно check_function<T>(0).bool_val
так пойдет?
ща попробую ченить тру =)
но sizeof юзают почти всегда, ибо выражение в сайз оф не вычисляется ( если это функция) ни на этапе компиляции и ран тайм, но возвращаемое значение учитываеться, т.е. метод может быть ваще без реализации или с косячными реализациями.
не неполучается, без сайз оф он пытаеться вызвать функцию и получить результат
my.name
> не неполучается, без сайз оф он пытаеться вызвать функцию и получить результат
ща попробую. задача какая? если присутсвует метод необходимый, то нужно его вызвать?
если в классе есть статический метод с определеным названием то его вызвать
шаблоны в общем-то тем и хороши, что можно тупо вызывать методы по сигнатуре (со всеми возможными неявным преобразованиями типов аргументов и возвращаемого значения), не заботясь о том, статические они, виртуальные или в свою очередь шаблонные
могу лишь догадываться зачем понадобился именно статический фабричный метод : )
Опа! по-моему гораздо красивее! но короче - это полюбому. нету двух лишних структур =))
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; }
Sh.Tac.
> могу лишь догадываться зачем понадобился именно статический фабричный метод : )
чую синглетонами тут попахивает.... xD
ps.
я конечно задачу не решил, в том виде, в котором предполагалось. но альрернативный варинат тоже ничо. а главное ни каких разрывов sizeof-ов
Zefick
> > Ты наверное путаешь, что конкретный размер char зависит от реализации
> А по моему как раз только он и не зависит. Хотя не знаю, как с этим на всяких
> там контроллерах. Надеюсь скоро узнать.
Есть дурные процессоры, в которых минимальная размерность операнда 4-байта. В таком случае у нас sizeof(char) == sizeof(short) == sizeof(int) == sizeof(long) == 4. TI такие делал.
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(...)
вот этот грязный хак вообще откуда взялся? где до такого чуда додумался?
Kloun
> а главное ни каких sizeof-ов
преимущества sizeof() уже приводились, он на самом деле всё знает от типах (чтобы узнать размер, надо как минимум знать тип), плюс к тому же ни хрена не вычисляет (вернее не вызывает ничего из того, что указано как аргумент)
в новом стандарте уже должен вовсю typeof() использоваться, а пока костыли : )
З.Ы. Kloun
> где до такого чуда додумался?
Александреску однака : )
Sh.Tac.
> преимущества sizeof() уже приводились
да я не спорю, что он ничего не вычисляет. но не красиво опеределять наличие метода у класса, измеряя размер массива sizeof ом. какбэ сущности разные...
это грязный хак!
> в новом стандарте уже должен вовсю typeof() использоваться, а пока костыли : )
и когда новый стандарт дойдет до народа?
> Александреску однака : )
злой тип однака... грязный хацкер! пропагандист говнокода xDD. чтобы мы без него делали =((
Тема в архиве.