C++ メタプログラミングを学ぶための練習プロジェクトとして、GSL 統合ルーチンの小さな C++ 再実装をコーディングしようとしています。次の質問があります。
いくつかの型特性を定義しました (プログラムが double と float の両方で動作するようにするため)
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' の無効な使用」と不平を言います
一番