Ааа, тады понял, сам юзаю подобный девайс от сайтека, подарили, сам скорее всего бы лучше логитеховский взял, а то от сайтека одно недоразумение, кнопки скрипучие и тугие, софт неудобный. А вот пальцев дотянутся до левого блока на G19 не хватает)
Не знаю, а мне было лень ждать и я ручками перепаял провод на своей G5 и не мучился) Да еще поменял глючившую кнопку. Разве что в вашем случае девайс посвежее.
Я бы сказал, что в конкретном варианте даже полезен compile time полиморфизм, для этого есть совсем неплохая либа boost::mpl, есть попроще Loki, да и самому здесь тоже писать очень мало, зато все отсеится на этапе компиляции и не будет лишнего кода. Когда-то клепал примерчик:
#include <iostream>
class Foo
{
public:
int GetValue()const{return 1;}
};
class Bar
{
public:
int GetValue()const{return 2;}
};
// ошибка, тип не поодерживается
// либо вообще убрать данную функцию, в этом случае будет ошибка компиляции на DoWork(bar);
template<typename T>
inline void _DoWork(const T& t, Int2Type<0>)
{
// в идеале здесь требуется статическая проверка этапа компиляции
std::cout << "error" << std::endl;
}
Я считаю, что сначала требуется знать шаблоны проектирования. Программист знающий шаблоны проектирования сразу определится с реализацией и в итоге не будет кучи промежуточных вариантов, которые опять же требуют время.
В конечном итоге меня очень сильно смущает смешивание сущностей. Введение объект CodeGeneratorBadProcessor, в итоге мы получаем некоторую путаницу. Да и судя по вашему примеру если этого класса не будет, то никто его и не создаст, я бы еще понял, если созданием объектов занималась фабрика. Тут все же лучше использовать исключения, а не некий объект, который выделяется из общего списка.
Опять же очень плохой момент в абстрактном классе невиртуальный деструктор, очень долго можно веселиться с ним.
Опять же путаница в стилях именования. Классы все буквы с большой, методы первые буквы с маленькой. Хорошо, что листинги еще короткие, а вот в больших листингах и реальной работе будет колоссальная путаница в итоге.
Исходный вариант тоже довольно веселый, если из enum убрать PHP, можно убрать и кидание исключения, компилятор просто не даст скомпилится коду с неправильным типом.
> Вот что творит с людьми демократия! Можно легко представить, как в той же Беларуси после смены режима министрами станут молодые люди из числа нынешних блогеров и политзаключённых.
Да что там Беларусь, у нас такое не за горами. Только у нас будет не все так просто как в Тунисе, уж больно территория страны большая.
Обзор то хорош, но после того как на моей Razer Naga сдохла левая кнопка за 4 месяца юзинга, отношения к компании стало слегка негативным. А при том условии, что аналоги по ттх, у конкурентов дешевле. Сейчас сижу на Cyborg R.A.T. 7, вот это действительно красава. Хотя как и весь софт у сайтека, корявый до безобразия. Второе колесо под семеркой так и не удалось завести.
Опять британские ученые, они вообще учитывали скорость перерисовки панелей такого размера и цветопередачу, я себе сразу представил, едет какая-то фигня по лесу, шумит, гудит, поднимает пыль, колышет ветки, давит траву, оставляет след, при этом отрисовывает камуфляж в унылых выгоревших красках, отрисовывает медленно и с запозданием.
У семерки дело не только в свапе.
1. Потребуется отключить службу поиска, уж больно она индексациями своими задолбывает.
2. Файловая система NTFS любит обновлять время доступа к файлу, это тоже потребуется отключить.
3. Перетащить свап.
4. Софт устанавливать на другой диск, SSD за 3к скорее всего хватит только на систему, судя по их ценам, винда любит сохранять инсталяшки в своей папке, еще кучу всякой фигни.
Судя по своим наблюдениям семерка активно юзает свап даже на 4 гигах оперативки, при условии, что свободной памяти море. На 8 гигах винда нашла свою нирвану и со свапом сейчас тихо себя ведет.
Очень жалко тот ssd диск, который будет на себе держать свап. Конечно пока сложно говорить что-то (диски не так давно используются, еще нет достоверных данных о реальном использовании), но дешеые диски на базе MLC дают всего лишь 10 тысяч циклов записи, а учитывая тот момент, что винда без свапа все равно не живет, то диск помрет довольно шустро и отдавать за диск 6к+ который к примеру через 3-6 месяцев придется выбросить мне жалко.
Вижу только вариант как установка софта на ssd диск, который не будет постоянно на него что-то писать.
Да ну нафик, у меня больная тема это наушники, дужки ломаются на ура, если металлические, так ломается что-нить другое. Еще такую дуру покупать. А еще потом сделают систему зеркал, чтобы не снимая было видно экран на наушниках, а то получается, либо видео, либо звук:-D
В данном случае больше всего расстраивает подход компании Gameloft к портированию своих игр на андроид, когда они на более тормозных аппаратах не тормозят, да и часто совместимость оставляет желать лучшего, многие игры вообще не идут на Acer Liquid.
Чёт я не понял прикол про С++, а почему тип передаем строкой? Что за маразм? Почему бы не передать TeaCup::Type и передавать в виде TeaCup::Black, конечно может показаться, что чёрная кружка, а не чай, но можно и статические константы закинуть, в плане производительности нормальный вариант.
#include <iostream>
class Foo
{
public:
int GetValue()const{return 1;}
};
class Bar
{
public:
int GetValue()const{return 2;}
};
template<int v>
struct Int2Type
{
enum {value = v};
};
template<typename T>
struct TypeTrait
{
enum {IsValid = 0};
};
template<>
struct TypeTrait<Foo>
{
enum {IsValid = 1};
};
template<typename T>
inline void _DoWork(const T& t, Int2Type<1>)
{
std::cout << "value: " << t.GetValue() << std::endl;
}
// ошибка, тип не поодерживается
// либо вообще убрать данную функцию, в этом случае будет ошибка компиляции на DoWork(bar);
template<typename T>
inline void _DoWork(const T& t, Int2Type<0>)
{
// в идеале здесь требуется статическая проверка этапа компиляции
std::cout << "error" << std::endl;
}
template<typename T>
inline void DoWork(const T& t)
{
_DoWork(t, Int2Type<TypeTrait<T>::IsValid>());
}
int main(int argc, char *argv[])
{
Foo foo;
Bar bar;
DoWork(foo);
DoWork(bar);
}
К сожалению почему-то подсветка синтаксиса в комментариях не заводится или её нет в предпросмотре.
В конечном итоге меня очень сильно смущает смешивание сущностей. Введение объект CodeGeneratorBadProcessor, в итоге мы получаем некоторую путаницу. Да и судя по вашему примеру если этого класса не будет, то никто его и не создаст, я бы еще понял, если созданием объектов занималась фабрика. Тут все же лучше использовать исключения, а не некий объект, который выделяется из общего списка.
Опять же очень плохой момент в абстрактном классе невиртуальный деструктор, очень долго можно веселиться с ним.
Опять же путаница в стилях именования. Классы все буквы с большой, методы первые буквы с маленькой. Хорошо, что листинги еще короткие, а вот в больших листингах и реальной работе будет колоссальная путаница в итоге.
Исходный вариант тоже довольно веселый, если из enum убрать PHP, можно убрать и кидание исключения, компилятор просто не даст скомпилится коду с неправильным типом.
Да что там Беларусь, у нас такое не за горами. Только у нас будет не все так просто как в Тунисе, уж больно территория страны большая.
1. Потребуется отключить службу поиска, уж больно она индексациями своими задолбывает.
2. Файловая система NTFS любит обновлять время доступа к файлу, это тоже потребуется отключить.
3. Перетащить свап.
4. Софт устанавливать на другой диск, SSD за 3к скорее всего хватит только на систему, судя по их ценам, винда любит сохранять инсталяшки в своей папке, еще кучу всякой фигни.
Судя по своим наблюдениям семерка активно юзает свап даже на 4 гигах оперативки, при условии, что свободной памяти море. На 8 гигах винда нашла свою нирвану и со свапом сейчас тихо себя ведет.
Вижу только вариант как установка софта на ssd диск, который не будет постоянно на него что-то писать.