Templates -- Meow  1.1.2
不能,也不應該先編譯成obj-file的templates
meow::Self< Data > Class Template Reference

具有copy on write, 且擁有比C++更靈活的reference機制 More...

#include "Self.h"

Public Member Functions

 Self (bool create_body)
 constructor More...
 
 Self (Self const &b)
 不允許copy constructor More...
 
 ~Self ()
 解構子 More...
 
Data const * operator-> () const
 回傳指向 Data const 的指標 More...
 
Data * operator-> ()
 回傳指向 Data 的指標, 如有需要, 這邊會做資料的duplicate More...
 
Selfoperator() () const
 回傳非const型態的自己 More...
 
void copyFrom (Self const &s)
 將給定的 Self 的資料複製到自己這裡 More...
 
void referenceFrom (Self const &s)
 將自己reference 到給定的 Self More...
 
bool same (Self const &s) const
 比對兩個 Self 是否指向同一個reference More...
 
bool equal (Self const &s) const
 比對兩個 Self 的內容是否一樣 More...
 
bool referenceLess (Self const &s) const
 以reference作為判斷依據的小於判斷 More...
 
void operator= (Self const &a)
 operator= 給disable掉 More...
 

Detailed Description

template<class Data>
class meow::Self< Data >

具有copy on write, 且擁有比C++更靈活的reference機制

使用上就是把所有成員變數包到一個class/structure裡, 送給Self
例如以下

class A {
private:
struct Myself {
int data;
Myself(){
data = 0;
}
~Myself() {
}
Myself copyFrom(Myself const& ms) const {
data = ms.data;
}
};
Self<Myself> const self;
public:
A(): self(true) { // self(true) 表示要建立實體, 即struct Myself
}
A(A const& a): self(false) { // for std::swap
}
// A(A const& a); // disable 模糊用法, 與上者二選一
A(A const& a, bool reference): self(false) {
if (reference) {
} else {
}
}
~A() {
}
void setMemeber(int k) {
self()->data = k; // self()->?? 可以有write權限
}
int getMemember(int wh) const {
return self->data; // self->?? 只有const
}
A referenceFrom(A const& a) {
self.referenceFrom(a.self);
}
A copyFrom(A const& a) {
self.copyFrom(a.self);
}
A& operator=(A const& b) { // for std::swap
}
A& operator=(A const& b); // 避免諢亂用法
};
Author
cathook
Warning
Self 這個class會把operator= 給disable掉, 所以使用它當 kernel的class預設的 operator= 都會無法使用

Constructor & Destructor Documentation

template<class Data>
meow::Self< Data >::Self ( bool  create_body)
inline

constructor

Parameters
[in]create_body是否要new一個實體資料 (如果constructor完, 馬上就要 copyFrom() , 或是 referenceFrom() 的話 不太需要 new一個實體, 否則基本上都要
template<class Data>
meow::Self< Data >::Self ( Self< Data > const &  b)

不允許copy constructor

template<class Data>
meow::Self< Data >::~Self ( )
inline

解構子

Member Function Documentation

template<class Data>
void meow::Self< Data >::copyFrom ( Self< Data > const &  s)
inline

將給定的 Self 的資料複製到自己這裡

Parameters
[in]s給定的Self
Returns
Note
與reference的差別是, copy之後若該給定的 Self 有資料修改, this 這邊 不會 被改到
template<class Data>
bool meow::Self< Data >::equal ( Self< Data > const &  s) const
inline

比對兩個 Self 的內容是否一樣

Parameters
[in]s另一個 Self
Returns
true/false 表示兩個內容是否一樣
Note
需要用到 Data的equal()
template<class Data>
Self& meow::Self< Data >::operator() ( ) const
inline

回傳非const型態的自己

template<class Data>
Data const* meow::Self< Data >::operator-> ( ) const
inline

回傳指向 Data const 的指標

template<class Data>
Data* meow::Self< Data >::operator-> ( )
inline

回傳指向 Data 的指標, 如有需要, 這邊會做資料的duplicate

template<class Data>
void meow::Self< Data >::operator= ( Self< Data > const &  a)

operator= 給disable掉

template<class Data>
void meow::Self< Data >::referenceFrom ( Self< Data > const &  s)
inline

將自己reference 到給定的 Self

Parameters
[in]s給定的Self
Returns
Note
把reference想像成指標會比較容易思考, 譬如 a.referenceFrom(b) b.referenceFrom(c) 相當於 a指向b原本指的記憶體位置, b指向c原本指的記憶體位置 , 之後更動c時, 只有b會被牽連
template<class Data>
bool meow::Self< Data >::referenceLess ( Self< Data > const &  s) const
inline

以reference作為判斷依據的小於判斷

Parameters
[in]s另一個 Self
Returns
true/false 表示自己是否小於另一個 Self
template<class Data>
bool meow::Self< Data >::same ( Self< Data > const &  s) const
inline

比對兩個 Self 是否指向同一個reference

Parameters
[in]s另一個 Self
Returns
true/false 表示是否為同一個reference

The documentation for this class was generated from the following file: