最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++ Boost TypeTraits庫使用詳解

 更新時間:2022年11月20日 15:36:51   作者:無水先生  
Boost是為C++語言標準庫提供擴展的一些C++程序庫的總稱。Boost庫是一個可移植、提供源代碼的C++庫,作為標準庫的后備,是C++標準化進程的開發(fā)引擎之一,是為C++語言標準庫提供擴展的一些C++程序庫的總稱

一、說明

反省是重點中的重點,泛型在實踐中貫穿工程的始終。以下庫支持泛型編程。無需詳細了解模板元編程即可使用這些庫。 Boost.TypeTraits 提供了檢查類型屬性的函數(shù)。 Boost.EnableIf 可以與 Boost.TypeTraits 一起使用,例如,根據(jù)函數(shù)的返回類型重載函數(shù)。 Boost.Fusion 使創(chuàng)建異構(gòu)容器成為可能——其元素可以具有不同類型的容器。

Boost.TypeTraits

Boost.EnableIf

Boost.Fusion

二、庫Boost.TypeTraits

類型具有泛型編程所利用的不同屬性。 Boost.TypeTraits 庫提供了確定和更改類型屬性所需的工具。

從 C++11 開始,Boost.TypeTraits 提供的一些函數(shù)可以在標準庫中找到。您可以通過頭文件 type_traits 訪問這些函數(shù)。然而,Boost.TypeTraits 提供了額外的功能。

示例 48.1。確定類型類別

#include <boost/type_traits.hpp>
#include <iostream>
using namespace boost;
int main()
{
  std::cout.setf(std::ios::boolalpha);
  std::cout << is_integral<int>::value << '\n';
  std::cout << is_floating_point<int>::value << '\n';
  std::cout << is_arithmetic<int>::value << '\n';
  std::cout << is_reference<int>::value << '\n';
}

Example48.1

示例 48.1 調(diào)用了幾個函數(shù)來確定類型類別。 boost::is_integral 檢查一個類型是否是整數(shù)——它是否可以存儲整數(shù)。 boost::is_floating_point 檢查類型是否存儲浮點數(shù)。 boost::is_arithmetic 檢查類型是否支持算術(shù)運算符。并且 boost::is_reference 可用于確定類型是否為引用。

boost::is_integral 和 boost::is_floating_point 是互斥的。類型存儲整數(shù)或浮點數(shù)。但是,boost::is_arithmetic 和 boost::is_reference 可以應(yīng)用于多個類別。例如,整數(shù)和浮點類型都支持算術(shù)運算。

Boost.TypeTraits 中的所有函數(shù)都提供一個 true 或 false 值的結(jié)果。示例 48.1 為 is_integral<int> 和 is_arithmetic<int> 輸出 true,為 is_floating_point<int> 和 is_reference<int> 輸出 false。因為所有這些函數(shù)都是模板,所以在運行時不會處理任何事情。該示例在運行時的行為就像在代碼中直接使用值 true 和 false 一樣。

在示例 48.1 中,各種函數(shù)的結(jié)果是 bool 類型的值,可以直接寫入標準輸出。如果結(jié)果要由函數(shù)模板處理,則應(yīng)將其作為類型而不是布爾值轉(zhuǎn)發(fā)。

示例 48.2。 boost::true_type 和 boost::false_type

#include <boost/type_traits.hpp>
#include <iostream>
using namespace boost;
int main()
{
  std::cout.setf(std::ios::boolalpha);
  std::cout << is_same<is_integral<int>::type, true_type>::value << '\n';
  std::cout << is_same<is_floating_point<int>::type, false_type>::value <<
    '\n';
  std::cout << is_same<is_arithmetic<int>::type, true_type>::value << '\n';
  std::cout << is_same<is_reference<int>::type, false_type>::value << '\n';
}

除了值,來自 Boost.TypeTraits 的函數(shù)還提供類型結(jié)果。 value 是一個 bool 值,type 是一個類型。就像只能設(shè)置為 true 或 false 的值一樣,類型只能設(shè)置為兩種類型之一:boost::true_type 或 boost::false_type。 type 允許您將函數(shù)的結(jié)果作為類型傳遞給另一個函數(shù)。

示例 48.2 使用了另一個來自 Boost.TypeTraits 的函數(shù),稱為 boost::is_same。此函數(shù)需要兩種類型作為參數(shù)并檢查它們是否相同。要將 boost::is_integral、boost::is_floating_point、boost::is_arithmetic 和 boost::is_reference 的結(jié)果傳遞給 boost::is_same,必須訪問 type。然后將類型與 boost::true_type 或 boost::false_type 進行比較。然后再次讀取 boost::is_same 的結(jié)果。因為這是一個布爾值,所以它可以寫入標準輸出。

示例 48.3。使用 Boost.TypeTraits 檢查類型屬性

#include <boost/type_traits.hpp>
#include <iostream>
using namespace boost;
int main()
{
  std::cout.setf(std::ios::boolalpha);
  std::cout << has_plus<int>::value << '\n';
  std::cout << has_pre_increment<int>::value << '\n';
  std::cout << has_trivial_copy<int>::value << '\n';
  std::cout << has_virtual_destructor<int>::value << '\n';
}

Example48.3

示例 48.3 介紹了檢查類型屬性的函數(shù)。 boost::has_plus 檢查類型是否支持運算符 operator+ 以及是否可以連接兩個相同類型的對象。 boost::has_pre_increment 檢查類型是否支持預(yù)遞增運算符 operator++。 boost::has_trivial_copy 檢查一個類型是否有一個平凡的復(fù)制構(gòu)造函數(shù)。 boost::has_virtual_destructor 檢查類型是否具有虛擬析構(gòu)函數(shù)。

示例 48.3 顯示 true 三次, false 一次。

示例 48.4。使用 Boost.TypeTraits 改變類型屬性

#include <boost/type_traits.hpp>
#include <iostream>
using namespace boost;
int main()
{
  std::cout.setf(std::ios::boolalpha);
  std::cout << is_const<add_const<int>::type>::value << '\n';
  std::cout << is_same<remove_pointer<int*>::type, int>::value << '\n';
  std::cout << is_same<make_unsigned<int>::type, unsigned int>::value <<
    '\n';
  std::cout << is_same<add_rvalue_reference<int>::type, int&&>::value <<
    '\n';
}

Example48.4

示例 48.4 說明了如何更改類型屬性。 boost::add_const 添加常量到一個類型。如果類型已經(jīng)是常量,則沒有任何變化。代碼編譯沒有問題,類型保持不變。

boost::remove_pointer 從指針類型中刪除星號并返回指針引用的類型。 boost::make_unsigned 將帶符號的類型轉(zhuǎn)換為不帶符號的類型。 boost::add_rvalue_reference 將類型轉(zhuǎn)換為右值引用。

示例 48.4 將 true 寫入標準輸出四次。

到此這篇關(guān)于C++ Boost TypeTraits庫使用詳解的文章就介紹到這了,更多相關(guān)C++ Boost TypeTraits內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Qt實現(xiàn)帶字數(shù)限制的文字輸入框

    Qt實現(xiàn)帶字數(shù)限制的文字輸入框

    這篇文章介紹了Qt實現(xiàn)帶字數(shù)限制文字輸入框的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • C語言數(shù)據(jù)結(jié)構(gòu)之動態(tài)分配實現(xiàn)串

    C語言數(shù)據(jù)結(jié)構(gòu)之動態(tài)分配實現(xiàn)串

    這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu)之動態(tài)分配實現(xiàn)串的相關(guān)資料,希望通過本文能幫助到大家,讓大家實現(xiàn)數(shù)據(jù)結(jié)構(gòu)中動態(tài)分配實現(xiàn)串的實例,需要的朋友可以參考下
    2017-10-10
  • C++基礎(chǔ)入門篇之強制轉(zhuǎn)換

    C++基礎(chǔ)入門篇之強制轉(zhuǎn)換

    這篇文章主要給大家介紹了關(guān)于C++基礎(chǔ)入門篇之強制轉(zhuǎn)換的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • C語言實現(xiàn)五子棋人人對戰(zhàn)

    C語言實現(xiàn)五子棋人人對戰(zhàn)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)五子棋人人對戰(zhàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • C++與Lua交互原理實例詳解

    C++與Lua交互原理實例詳解

    這篇文章主要介紹了C++與Lua交互原理實例詳解,有感興趣的同學(xué)可以研究下
    2021-02-02
  • C語言 坐標移動詳解及實例代碼

    C語言 坐標移動詳解及實例代碼

    這篇文章主要介紹了C語言 坐標移動詳解及實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • C語言詳解用char實現(xiàn)大小寫字母的轉(zhuǎn)換

    C語言詳解用char實現(xiàn)大小寫字母的轉(zhuǎn)換

    這篇文章主要給大家介紹了關(guān)于C語言實現(xiàn)大小寫字母轉(zhuǎn)換的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • C++ 再識類和對象

    C++ 再識類和對象

    類是創(chuàng)建對象的模板,一個類可以創(chuàng)建多個對象,每個對象都是類類型的一個變量;創(chuàng)建對象的過程也叫類的實例化。每個對象都是類的一個具體實例(Instance),擁有類的成員變量和成員函數(shù)
    2021-10-10
  • 詳解c++良好的編程習(xí)慣與編程要點

    詳解c++良好的編程習(xí)慣與編程要點

    c++語言的靈活是建立在對編程者個人的編程素質(zhì)的嚴格要求基礎(chǔ)上的,好的C++編程習(xí)慣能避免很多問題。沒有好的編程習(xí)慣,極有可能編寫一行代碼,編譯器能報十幾個錯誤,而且就算編譯通過了,將來在運行過程中也會有很多莫名奇妙的問題
    2021-06-06
  • C++實現(xiàn)LeetCode(889.由先序和后序遍歷建立二叉樹)

    C++實現(xiàn)LeetCode(889.由先序和后序遍歷建立二叉樹)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(889.由先序和后序遍歷建立二叉樹),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07

最新評論

江阴市| 婺源县| 始兴县| 乌审旗| 河间市| 来宾市| 荃湾区| 吉林市| 海原县| 新竹县| 长丰县| 合山市| 肥东县| 昌吉市| 顺平县| 扎鲁特旗| 弥渡县| 永和县| 克什克腾旗| 玉树县| 江口县| 屏东县| 攀枝花市| 惠来县| 满洲里市| 夹江县| 富裕县| 涪陵区| 威宁| 杭锦后旗| 天门市| 留坝县| 文安县| 宣武区| 鄂伦春自治旗| 达孜县| 江达县| 镇宁| 资中县| 安平县| 滨州市|