我正在尝试编写 GSL 集成例程的小型 C++ 重新实现作为学习 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’”
最好的