當我使用Boost.Tuple
,我必須使用一些語法,如:任何人都可以解釋升壓元組庫的語法?
result.get<0>()
它看起來很生疏了。通常<>
包含一個typename,爲什麼在這裏使用int
?
當我使用Boost.Tuple
,我必須使用一些語法,如:任何人都可以解釋升壓元組庫的語法?
result.get<0>()
它看起來很生疏了。通常<>
包含一個typename,爲什麼在這裏使用int
?
他們所使用的語法result.get<0>()
的原因是,中的每一個元素元組可以有不同的類型,這種語法是C++最簡單的方式,讓編譯器用類型來做正確的事情。
如果函數只是普通的get(0)
,則元組的所有元素都必須具有相同的類型,因爲沒有辦法讓一個未模擬的函數返回幾個不同的類型。
類似result.get<int>(0)
可能在理論上工作,但它更詳細,並引入了一個潛在的錯誤來源 - 如果第0個元素根本不是int
?更糟的是,你只能在運行時捕捉到這個錯誤。 Boost中使用的語法簡單明瞭 - 唯一可能導致錯誤的方法是指定無效索引,並且可以在編譯時捕獲該索引。
<>
之間可以是類型。它也可以是整數。實際上,它可以是很多事情。模板參數可以是類型名稱,但它們也可以是編譯時常量值。
聲明一個模板函數採用一個類型:
template<typename T> void foo();
這一個需要的編譯時整數:
template<int I> void foo();
如果您熟悉模板元編程(TMP),這是一個相當熟悉的語法。但是如果你不想陷入編譯時編程的黑魔法,那麼你應該擔心的是模板參數是元組索引
使用整數作爲模板參數在C++中是完全有效的。 – Anthony 2012-02-04 06:49:34
它使用int來給出一個數字......它看起來很複雜。 – ssube 2012-02-04 06:51:19
爲什麼不使用類似result.get(1)? –
2012-02-04 07:18:25