在談談using 在c++2.0之後的新增用法之前,還需要先了解一下什麼叫做Alias Template。之後才能更好理解爲做什麼要這麼使用。
1.結合Alias Template所使用的對模板typedef
什麼是Alias Template?
就是設計一個模板,並且對這個模板的類型進行typedef操作。下面看一下的使用
template <typename T>
using Vec = std::vector<T,MyAlloc<T>>;
Vec<int> coll;
//其實就等於下面的代碼
std::vector<int,MyAlloc<int>> coll;
從上面的代碼上可以看到,using其實實現的是一個typedef的動作,然後我們可以使用這個模板的類型去定義一些其他的變量。但是,或許就會有人說,這裏不可以直接使用宏或者是一些其他的變量去代替這個用法麼?它出現的意義是什麼?當然是因爲別的用法代替不了這個using的價值
#define Vec<T> template<typename T> std::vector<T,MyAlloc<T>>;
//之後就變成了整個的宏替換
template<typename T> std::vector<int,MyAlloc<int>>;
//這其實也不是我們想要達到的效果
typedef的話因爲不能傳遞參數T所以也不行,這就是爲什麼我們需要別名模板,既能夠達到相應的傳遞參數動態創建的能力,也可以符合一般的模板的特性.所以別名模板也是很方便的技巧.
但是,想要使用這個別名的話就是需要付出一下代價
如果我們需要使用偏特化的模板就不能使用別名而是要把它的全名打開
2.展開namespace,或者用它來表示某種需要聲明的類等等
這種就是很常見的
using namespace std;//這個就是一個命名空間
using boost::asio::ip::tcp::socket;//這個可能就是一個類
3.給函數指針做定義,這個也是可以代替typedef的
using func = void(*)();
func fun;
typedef void(p*)();
p fun;