+6
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
template <typename T, size_t rows, size_t cols>
class Matrix {
public:
Matrix() :
m_matrix(reinterpret_cast<T*>(new char[sizeof(T) * rows * cols]))
{
memset(m_matrix, 0, sizeof(T) * rows * cols);
new (m_matrix) T[rows * cols];
if ( rows == cols ) {
for ( size_t i = 0; i < rows; i++ )
m_matrix[i * cols + i] = 1; // FIXME: this is hack
}
}
// ...
private:
T *m_matrix;
};
Из прошлого куска.
Инициализируем память нулями. А вдруг тип скалярный? :)
Elvenfighter,
01 Декабря 2012
+10
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
template <typename T, size_t rows, size_t cols>
class Matrix {
public:
Matrix() :
m_matrix(new T[rows * cols])
{
// Make identity matrix, if possible
if ( rows == cols ) {
for ( size_t i = 0; i < rows; i++ )
m_matrix[i * cols + i] = 1; // FIXME: this is hack
}
}
// ...
Matrix<T, rows, cols>& operator =(Matrix<T, rows, cols> &&other) {
if ( this != &other ) {
delete [] m_matrix;
m_matrix = other.m_matrix;
other.m_matrix = new T[cols * rows];
other = static_cast<const Matrix&>(Matrix());
}
return *this;
}
// ...
};
Издержки move construtor :)
Прошу внимания к строчкам 19-23
Elvenfighter,
30 Ноября 2012
+14
- 1
int main(){(([](){})());}
preview.tinyurl.com/blrtfuo
ideone.com/BXrXDR
Или еще чуть веселее:
ideone.com/C425yo
Xom94ok,
30 Ноября 2012
+2
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
template <typename A, typename B>
class ololo
{
};
template <typename A>
class ololo <A, int>
{
};
template <typename A>
void bububu ()
{
}
template <>
void bububu <int> ()
{
}
template <typename A, typename B>
void kokoko ()
{
}
template <typename A>
void kokoko <A, int> ()
{
}
http://www.gamedev.ru/flame/forum/?id=169781
tarasboproblemi
LispGovno,
29 Ноября 2012
+19
- 1
- 2
- 3
- 4
Class1* c1 = (Class1*)malloc(sizeof(Class1)*N);
Class2* c2 = (Class2*)malloc(sizeof(Class2)*N);
for (long i = 0; i < N; i++) c1[i] = Class1();
for (long i = 0; i < N; i++) c2[i] = Class2();
Рассказать ему про new[] / delete[]?
runewalsh,
29 Ноября 2012
+12
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
#include <stdio.h>
#include <type_traits>
#include <string>
struct hack_t{};
template<class TYPE>static hack_t operator&(const TYPE&,hack_t){return hack_t();}
int main()
{
struct type{};
std::string var="win";
#define get_meta(var)[&]()->bool{hack_t unnamed;hack_t foo(var&unnamed);return std::is_function<decltype(foo)>::value;}()
bool result_0=get_meta(var);
bool result_1=get_meta(type);
#undef get_meta
printf("get_meta(var) == %s\n",result_0?"true":"false");
printf("get_meta(type) == %s\n",result_1?"true":"false");
return 0;
}
Код отличает переменную от типа.
http://ideone.com/t7BBO4
Сами знаете откуда.
LispGovno,
27 Ноября 2012
+10
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
//В mathc.hpp:
typedef float import (float);
//В неком cpp функция:
float cm() {
import calcFpu;
//...
float src = //...
float res = calcFpu(src);
return res;
}
//В mathc.cpp:
void calcFpu(float){
//...
void calcSSE(float){
//...
Мои глаза... В перлы.
http://ideone.com/RBAMyv
LispGovno,
27 Ноября 2012
+77
- 1
delete[] Memory, leak; //Унарные операторы, такие уринарные.
Былинный отказ.
igumnovf,
23 Ноября 2012
+15
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
#include <iostream>
#include <functional>
template<class Container, class F, class A>
auto accumulate(Container c, F f, A acc) -> A
{
auto id = [](const A& a) -> const A& {return a;};
typedef decltype(std::begin(c)) Iterator;
const std::function<A(const Iterator& lst, const std::function<A(const A&)>&)> doIt =
[&](const Iterator& lst, const std::function<A(const A&)>& cont) -> A
{
if(lst==c.end())
return cont(acc);
else
{
auto conter=[&](const A& acc) -> A {return cont(f(*lst, acc));};
return doIt(lst+1, conter);
}
};
return doIt(std::begin(c), id);
}
int main() {
std::cout<<accumulate({1,2,3,4}, std::plus<int>(), 0);
return 0;
}
Похоже написал какой-то монадолог.
http://ideone.com/y4Dm9z
Пример использования accumulate сам накатал.
Я побаловался с этим примером, чтобы разобраться и GCC ожидаемо упал:
http://ideone.com/XWfuoP
Я убежден, что эта функция должна была выглядеть как-то так:
template<class Container, class F>
accumulate(const Container& c, const F& f=std::plus<decltype(*(std::begin(c)))>(), const decltype(*(std::begin(c))) acc=decltype(*(std::begin(c)))()) -> decltype(*(std::begin(c)))
{
return std::accumulate(c.begin(), c.end(), acc, f);
}
//Вызов этой функции:
accumulate({1,2,3,4});
Ну и я погуглил на тему этого говнокода и нашел на функциональном языке похожий:
let fold_right func acc list =
let rec loop list cont = //сюда мы передаем текущую функцию континуации
match list with
|[] -> cont acc //а вот и наше ключевое вычисление.
|head::tail -> loop tail (fun racc -> cont (func head racc))
loop list (fun x -> x)
LispGovno,
23 Ноября 2012
+17
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
#include <iostream>
int main() {
std::cout << (2,0 * 2,5) << std::endl; // 5
std::cout << (0,625 * 6,4) << std::endl; // 4
std::cout << (2,5 * 2,0) << std::endl; // 5?
return 0;
}
Почему в с++ умножение некоммутативно?
http://ideone.com/Erp3uv
bormand,
21 Ноября 2012