- 1
- 2
- 3
- 4
override public function toString():String
{
return Object(container).toString() + "." + super.toString();
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−184.5
override public function toString():String
{
return Object(container).toString() + "." + super.toString();
}
Еще одно украшение Флексового фреймворка: mx.core::Repeater.
Для тех, кто не в курсе: toString() вызываетйса автоматически когда мы пытаемся вывести информацию об объекте в консоль. (Т.е. жизненно необходим для тестирования). Свойство container у репитера радко, но может буть null, но изза того, что флексовые разработчики не категорически никогда не кастуют ничего, то это должно было бы выкинуть исключение, но, конвертация используемая в примере (вместо каста) в силу особенностей языка вместо того чтобы просто умереть с исключением создаст новый динамический объект, врезультате получим что-то типа:
"[Object object].имяКомпонента".
т.е. на самом деле код должен был выглядеть примерно так:
return (this.container ? this.container.toString() + "." : "") + super.toString();
+61.9
//Обьявление класса в хедере с последующей реализацией:
template<class TConstructStrategy>
class TClass
{
public:
TConstructStrategy __ctor;
//...Прочие методы...
};
//...Реализация прочих методов класса...
//================================================================
//Конструктор с переменным числом параметров, типа функтор:
//Тоесть обьявлено где-то в коде проекта и передаётся, как параметр при конструировании.
typedef void TConstract(int a);
template<>
TClass<TConstract>::TClass(int a)
{
//doing...
};
int main(int argc, char* argv[])
{
//...
TClass<TConstract> A(5);
//...
}
Это говнокод, но не результат работы над проектом, а результат насмешек над компилятором MSVC 6.0.
Основано на обявлении типа-функции:
typedef void TConstract(int a);, но тк конструктор не функция - используется внутренее имя конструктора MSVC6.0:
void __ctor(void);, согласно которому он всё-таки функция.
__dtor - "внутренее" имя деструктора, кстати.
Спалить "секретное" имя обычно можно в сообщениях об ошибках c участием этих имён. При входе в конструктор/деструктор через отладчик под дизасемблером(наверное). В стеке вызовов отладчика(наверное). Наверное ещё как-нибудь, например проходом HEX редактора по экзешнику компилятора и прилижащим dll...
Итак для обсуждения (хотя и не собираюсь это использовать):
1)Как ещё, кроме странных пергрузок, представленного выше метода конструктора-функтора, и вызовов типа A.__ctor(); / A.__dtor() это можно использовать?
2)Какие "скрытые" имена конструкторов/деструкторов у других компиляторов? Я пробовал в MSVC6.0. В MSVS 2008 при первом расмотрении "внутреннее" имя другое и сходу не палится.
Для примера приведу метод с "обычным" функтором (на самом деле он не самый обычный):
//Обьявление класса в хедере с последующей реализацией:
template<class TStrategy>
class TClass
{
public:
TStrategy func;
//...Прочие методы...
};
//...Реализация прочих методов класса...
//================================================================
//Функтор:
//Тоесть обьявлено где-то в коде проекта и передаётся, как параметр при конструировании.
typedef void TFunc(void);
template<>
void TClass<TFunc>::func(void)
{
//doing...
};
int main(int argc, char* argv[])
{
//...
TClass<TFunc> A;
A.func();
//...
};
+142.6
using System;
using Nemerle.Collections;
using Nemerle.Text;
using Nemerle.Utility;
using System.Runtime.InteropServices;
namespace nCdy
{
/// <summary>
/// Description of Win32API.
/// </summary>
public static class Win32API
{
[ Flags ]
public enum AllocationType
{
| Commit = 0x1000
}
[ Flags ]
public enum ProcessAccess : int
{
| VMOperation = 0x8
| VMRead = 0x10
| VMWrite = 0x20
}
[ Flags ]
public enum MemoryProtection
{
| ReadWrite = 0x04
}
//[StructLayout(LayoutKind.Sequential)]
public struct LUID {
internal LowPart : uint;
internal HighPart : uint;
}
//[StructLayout(LayoutKind.Sequential)]
public struct TOKEN_PRIVILEGES
{
public PrivilegeCount : UInt32;
public Luid : LUID;
public Attributes : UInt32;
}
public struct MOUSEINPUT
{
dx : int;
dy : int;
mouseData : int;
dwFlags : int;
time : int;
dwExtraInfo : IntPtr;
}
public struct KEYBDINPUT
{
public mutable wVk : char ;
public wScan : short ;
public dwFlags : int ;
public time : int ;
public dwExtraInfo : IntPtr ;
}
public struct HARDWAREINPUT
{
uMsg : int ;
wParamL : short ;
wParamH : short ;
}
[StructLayout(LayoutKind.Explicit)]
public struct INPUT
{
[FieldOffset(0)]
public mutable typefield : int ;
[FieldOffset(4)]
mi : MOUSEINPUT;
[FieldOffset(4)]
public mutable ki : KEYBDINPUT;
[FieldOffset(4)]
hi : HARDWAREINPUT;
}
[DllImport("user32.dll")]
public static extern keybd_event(
bVk : byte,
bScan : byte,
dwFlags : uint,
dwExtraInfo : UIntPtr) : void ;
[DllImport("user32.dll")]
ООП
+102.3
string statStr = string.Format("execution statistics:" + Environment.NewLine
+ "\t{0}" + Environment.NewLine + "\t{1}",
_requestUrl,
execStat);
+56.5
void ff(const TCHAR *curDir)
{
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
TCHAR cd[MAX_PATH], res[MAX_PATH], dirname[MAX_PATH], filename[MAX_PATH];
strcpy_s(cd, MAX_PATH, curDir);
strcat_s(cd, MAX_PATH, "\\*.*");
hFind = FindFirstFile(cd, &FindFileData);
BOOL r = hFind != INVALID_HANDLE_VALUE;
while (r)
{
r=FindNextFile(hFind, &FindFileData);
if (FindFileData.cFileName[0] != '.') try
{
strcpy_s(cd, MAX_PATH, curDir);
strcat_s(cd, MAX_PATH, "\\");
strcat_s(cd, MAX_PATH, FindFileData.cFileName);
if (!r) // если ссылка последняя смысле handle то записываем имя файла
strcpy_s(filename, MAX_PATH, FindFileData.cFileName);
if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
ff(cd);
else
{
char* k=NULL;
if (!r)
k=strstr(filename,FindFileData.cFileName); // проверяем если является имя каталога подстрокой в имени файла хреначим на вывод(при том что ссылка была последней)
// смысле на вывод хреначим вот здесь
if (k!=NULL)
{
CharToOem(cd, res);
cout<<res<<endl;
}
}
}
catch(...)
{
cout<<"Can not display file name"<<endl;
}
}
}
+156
$('.value_field').bind('change', function() {
$('.' + $(this).attr('id')).val($(this).val());
});
+135.2
protected void DuplicateFilterNameValidator(object source, ServerValidateEventArgs args)
{
string _filterName = FilterName.Text;
SqlCommand command = new SqlCommand();
SqlDataReader filterNameReader = null;
try
{
SqlConnection connection = new SqlConnection(strConn);
connection.Open();
command.CommandText = "EventNotificationFilterSelectByName";
command.Connection = connection;
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(new SqlParameter("@filterName", _filterName));
filterNameReader = command.ExecuteReader();
if (filterNameReader.HasRows)
{
args.IsValid = false;
}
if ((connection != null) & (connection.State == ConnectionState.Open))
{
connection.Close();
}
}
catch (Exception e)
{
_log.Error(e);
}
}
omg...
+134.7
private bool localGlobal;
//...
string filterActionOrder = FilterActionOrder.Text;
//For sorting purpose, substract .5 to the ActionOrder to ensure
//the order specified takes precedence
double filterActionOrderTemp = Double.Parse(filterActionOrder) - .5;
filterActionOrder = filterActionOrderTemp.ToString();
без комментариев :)
+130.9
def TryToFix() : void
{
def RozoviySlon() : bool
{
System.Diagnostics.Process.Start("http://rsdn.ru/Users/73.aspx");
if("solution"=="Весёлый слоник не поднимает настроение ?")
false
else
true
}
unless ( (if ( RozoviySlon() ) "Розовый слон"
else "Всё хорошо :D") == "Всё хорошо :D" )
while( RozoviySlon() )
MessageBox.Show("ААААААААААААААААААА !!!");
}
try
{
Application.Run(nCdy.nForm());
}
catch
{
| e is Exception => TryToFix();
}
Весёлый слоник не поднимает настроение ?
+144.2
$yii=dirname(__FILE__).'/protected/yii/framework/yiilite.php';
//$yii=dirname(__FILE__).'/protected/yii/framework/yiilite.php';