2012-02-04 84 views
0

當我使用Boost.Tuple,我必須使用一些語法,如:任何人都可以解釋升壓元組庫的語法?

result.get<0>() 

它看起來很生疏了。通常<>包含一個typename,爲什麼在這裏使用int

+1

使用整數作爲模板參數在C++中是完全有效的。 – Anthony 2012-02-04 06:49:34

+1

它使用int來給出一個數字......它看起來很複雜。 – ssube 2012-02-04 06:51:19

+1

爲什麼不使用類似result.get (1)? – 2012-02-04 07:18:25

回答

3

他們所使用的語法result.get<0>()的原因是,中的每一個元素元組可以有不同的類型,這種語法是C++最簡單的方式,讓編譯器用類型來做正確的事情。

如果函數只是普通的get(0),則元組的所有元素都必須具有相同的類型,因爲沒有辦法讓一個未模擬的函數返回幾個不同的類型。

類似result.get<int>(0)可能在理論上工作,但它更詳細,並引入了一個潛在的錯誤來源 - 如果第0個元素根本不是int?更糟的是,你只能在運行時捕捉到這個錯誤。 Boost中使用的語法簡單明瞭 - 唯一可能導致錯誤的方法是指定無效索引,並且可以在編譯時捕獲該索引。

1

<>之間可以是類型。它也可以是整數。實際上,它可以是很多事情。模板參數可以是類型名稱,但它們也可以是編譯時常量值。

聲明一個模板函數採用一個類型:

template<typename T> void foo(); 

這一個需要的編譯時整數:

template<int I> void foo(); 
0

如果您熟悉模板元編程(TMP),這是一個相當熟悉的語法。但是如果你不想陷入編譯時編程的黑魔法,那麼你應該擔心的是模板參數是元組索引

相關問題