- 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
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
#pragma syntax(C++03) // было
int i,j,*pi,&ri=...,ai[10],aai[10][20];
const int ci = 100;
T myFunction (TX x1,TX x2,TY y1,TY ywd=...);
#pragma syntax(C++SD) // стало
var(int) i,j;
var(Ptr[int]) pi;
var(Ref[int]) ri = ...;
var(Array[int,10]) ai;
var(Array[Array[i,20],10]) aai;
var(Immutable[int]) ci = 100;
// отличать от:
const(int) cci = 100; // и cci с рантаймовой точки зрения будет чистой константой, а не "типа неизменяемой переменной"
function(T) myFunction (var(TX) x1,x2; var(TY) y1,ywd=...);
// ^смысл в том, чтобы список параметров имел ту же форму, что декларация переменных и членов структур
// возможны и константные функции
function const(int) constSum (const(int) x1,x2) { return x1+x2; }
// теперь constSum (1,2) будет всё равно что 3
// это теперь заменяет тайпдеф
const(typename) Int32 = int;
#pragma syntax(C++03) // было
class C
{
int mi;
static int si;
private:
float mf;
void privateMethod1 () {...}
void privateMethod2 ();
protected:
void staticMethod1 () {...}
void staticMethod2 ();
public:
virtual void virtualMethod ();
};
int C::si;
void C::privateMethod2 () {...}
void C::staticMethod2 () {...}
void C::virtualMethod () {...}
#pragma syntax(C++SD) // стало
class C
{
// эта секция называется "имплементацией класса"
var(int) mi;
// статические поля в имплементации класса не объявляются
private:
var(float) mf;
function() privateMethod1 () {...}
//void privateMethod2 (); // объявлять методы, который не имплементируются тут же, не обязательно
protected:
function() staticMethod1 (): Static
{...}
// Static - пометка для функции, декларируемой/имплементируемой в имплементации класса,
// что это не метод, а просто функция
public:
virtual function() virtualMethod ();
// в имплементации класса по-настоящему нужна декларация только переменных-полей,
// виртуальных методов и деструктора, если он пишется юзером
// также:
var(int) inlinelyInitialized = 100;
// да, инициализаторы тоже допускаются
};
using (C) var(int) si; // using(C) - пометка, что декларация касается неймспейса C
using (C) private: function() privateMethod2 (): Method {...}
// ^если метод объявляется/имплементируется вне имплементации класса, его
// нужно пометить как Method, чтобы отличить от обычной функции
// using можно юзать и целым блоком...
using (C)
{
protected:
// для функции-неметода вне имплементации класса уточнение Static не требуется
function() staticMethod2 {...}
public:
function() virtualMethod (): Method {...}
}
// глобальный скоп - тоже типа класс, для его явного указания, если вдруг понадобится,
// используется конструкция using (.)
Тот момент, когда понимаешь: "Какая радость, что в создатели стандарта крестов не берут кого попало."
http://www.gamedev.ru/flame/forum/?id=178107