- 1
std::AIDS
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
Всего: 10
+1
std::AIDS
−159
package Bool;
use strict;
use Carp qw/croak/;
use Scalar::Util qw/blessed/;
use base "Exporter";
our @EXPORT = qw/true false/;
use overload(
'bool' => \&op_bool,
'!' => \&op_not,
'==' => \&op_equal,
'!=' => \&op_not_equal,
'""' => \&op_to_string,
);
our $true = !0;
our $false = !!0;
use constant true => bless \$true;
use constant false => bless \$false;
sub import {
my($package) = @_;
$package->export_to_level(1, @_);
&Internals::SvREADONLY(\!0, 0);
&Internals::SvREADONLY(\!!0, 0);
${ \!0 } = true;
${ \!!0 } = false;
&Internals::SvREADONLY(\!0, 1);
&Internals::SvREADONLY(\!!0, 1);
}
sub op_bool {
my($self) = @_;
return $$self;
}
sub op_not {
my($self) = @_;
$$self ? false : true;
}
sub op_equal {
my($l, $r) = @_;
typecheck($l, $r);
return (($$l && $$r || !$$l && !$$r) ? true : false);
}
sub op_not_equal {
my($l, $r) = @_;
typecheck($l, $r);
return (($$l && $$r || !$$l && !$$r) ? false : true);
}
sub op_to_string {
my($self) = @_;
return $self ? "true" : "false";
}
sub typecheck {
map { blessed $_ eq __PACKAGE__ or croak "Bool: Type error" } @_;
return;
}
1;
true/false в perl.
true == true -> true
1 == 1 -> true
"a" eq "b" -> false
и т.п.
true == 1 # Ошибка
Пришлось долго искать как превратить !0 в true и !!0 в false, посмотрел в чужом модуле.
−124
package Exception;
sub new {
my($package, $what) = @_;
return bless { what => $what }, $package;
}
sub what {
my($self) = @_;
return $self->{what};
}
package main;
sub try(&$) {
my($code, $catch) = @_;
unless(eval { $code->(); 1 }) {
local $_ = $@;
$catch->();
}
}
sub catch(&) { $_[0] }
sub throw($) { die $_[0] }
try {
throw new Exception("Ошибка");
} catch {
print $_->what;
};
Исключения в perl.
+7
namespace engine { namespace ui { class Console; } }
class Dummy
{
engine::ui::Console * _ptr;
};
Решение проблемы с перекрёстными #include, когда классы должны хранить указатели друг на друга. Простое объявление class engine::ui::Console; не работает.
Не в первый раз сталкиваюсь с этой проблемой из-за примитивной системы импорта.
+12
class Random
{
public:
int getInt(int min, int max)
{
return std::uniform_int_distribution<int>(min, max)(_rd);
}
double getReal(double min, double max)
{
return std::uniform_real_distribution<double>(min, max)(_rd);
}
bool getBool()
{
return std::uniform_int_distribution<int>(0, 1)(_rd);
}
private:
std::random_device _rd;
};
Даже не знаю, говнокод это или нет.
+14
int error = (unsigned)-1;
int x, y, w, h;
x = y = w = h = error;
stream >> x >> y >> w >> h;
if(x == error || y == error || w == error || h == error)
...
Не нашёл, как по-другому обрабатывать ошибки текстовых командах.
+16
#define Throw(exc, msg) do { \
std::stringstream exc_str; \
exc_str << __FILE__ << ":" << __LINE__ \
<< ": " << __func__ << "(): " << msg; \
throw exc(exc_str.str()); \
} while(0)
Throw(std::runtime_error, "test");
terminate called after throwing an instance of 'std::runtime_error'
what(): main.cpp:22: main(): Error
Как вам?
+28
const std::string cyrillic = "аАбБвВгГдДеЕёЁжЖзЗиИйЙкКлЛмМнНоОпПрРсСтТуУфФхХцЦчЧшШщЩъЪыЫьЬэЭюЮяЯ";
std::string cyrillic_toupper(std::string s)
{
if(cyrillic.find(s) == std::string::npos)
throw std::runtime_error(std::string("cyrillic_toupper(): ") + "'" + s + "' is not cyrillic char");
return cyrillic.substr(cyrillic.find(s) + 2, 2);
}
+28
std::string toString(std::function<std::string(T)> f = std::function<std::string(T)>()) {
std::stringstream ss;
if(f)
ss << f(some_value);
else
ss << some_value;
return ss.str();
}
+29
string input;
string output;
input = "C:\\bla.txt\\"; //"Bla.txt" is the file to copy
output = "C:\\test\\"; //"Test" is the folder to copy to
system("copy input.c_str() output.c_str()")
http://cboard.cprogramming.com/cplusplus-programming/109047-help-copy-files-cplusplus.html