我試圖編寫一個小的C++重新實現GSL集成例程作爲一個實踐項目來學習C++元編程。我有以下問題。模板參數向量::構造函數
我已經定義了一些類型的特性(使程序與雙浮筒和工作兩者)
template<typename T> class IntegrationWorkspaceTraits;
template<> class IntegrationWorkspaceTraits<double>
{
public:
typedef double ft; //float_type
static constexpr ft zero = 0.0;
};
template<> class IntegrationWorkspaceTraits<float>
{
public:
typedef float ft; //float_type
static constexpr ft zero = 0.0f;
};
現在我有一個使用這種特質,像這樣
template< typename T, typename AT = IntegrationWorkspaceTraits<T> > GslIntegrationWorkspace
{
typedef typename AT::ft ft;
typedef typename AT::zero zero;
public:
GslIntegrationWorkspace(size_t size);
private:
typename std::vector<ft> alist;
}
類
我的問題是:如何使用定義在特徵上的零常量來設置成員矢量的初始值。我的猜測是一樣的東西
template<typename T, typename AT>
GslIntegrationWorkspace::GslIntegrationWorkspace(size_t size):
alist(size, typename AT::zero),
{};
但是編譯器G ++抱怨 「gsl_integration.h:63:42:錯誤:無效使用模板名稱 'GslIntegrationWorkspace' 沒有一個參數列表」
最好
你真的需要一個特質讓你回到'T'和'T()'嗎?這看起來像是完全矯枉過正......'alist(size)'會有完全相同的行爲。 –