2012-06-24 46 views
1

我有代碼,有點類似如下:使用std :: tuple_size ::陣列

#include <array> 

class DoubleArray: std::array<double, 16> { 
public: 
    void clear() { 
     fill(0.0); 
    } 
}; 

現在我想用std::array的大小作爲一個編譯時間常數。如果DoubleArray只是一個typedefstd::array我可以用std::tuple_size<DoubleArray>::value但使用繼承,而不是我得到以下編譯器錯誤:

error: incomplete type ‘std::tuple_size<DoubleArray>’ used in nested name specifier 

我見過tuple_size and an inhereted class from tuple?但是,由於有關的std ::元組只會談中,我不認爲這可以應用。任何想法,爲什麼這不起作用,如果有一個簡單的方法,使其工作?

+4

如果你確定它你可以說'的std :: tuple_size <::的doubleArray陣列> :: value' 。 –

+0

@litb完美,謝謝!這實際上比我想象的要容易... – TBieniek

+0

我不明白爲什麼鏈接的問題不適用於此。您可以專門爲您的類型設置tuple_size,但我個人更喜歡Johannes的建議。 –

回答

1

只需撥打size() - 對於陣列它是一個constexpr

在這裏看到:http://en.cppreference.com/w/cpp/container/array/size 或檢查§23.3.2.1.3它被定義爲constexpr size_type size() noexcept;

+0

這似乎不工作,因爲size()不是一個靜態方法,並且我沒有該類的實例。沒有實例,DoubleArray :: size()不能被調用。 – TBieniek

+0

@Turbo:爲什麼*不是靜態方法?它不會基於實例進行更改,所以沒有理由使它成爲非靜態的。 –

+0

@NicolBolas他應該如何回答這個問題?這些問題是標準解釋的問題。有關類似的參數,請參閱http://stackoverflow.com/questions/7820981。在這種情況下,「array :: size」是靜態還是非靜態是實現細節。 – Potatoswatter