我在c ++机器库(dlib)的类中有一个typedef,如下所示:
typedef dlib::matrix<double, 64, 1> sample_type;
除了64实际上是一个变量。我希望typedef在整个类中都可见,但我希望第二个参数(64)在调用构造函数时成为参数。我怎样才能实现这一点,同时保持typedef在任何地方都可见?
答案 0 :(得分:2)
使用当前设计是不可能的,因为模板参数必须在编译时才知道,而构造函数的参数没有那个限制。
原因是因为任何模板扩展应该被看作是它自己的类型; template参数是类型的一部分(std::vector<int>
是与std::vector<float>
不同的类型。)
答案 1 :(得分:1)
这实际上是dlib网页上的frequently asked questions之一。你做的是这个:
typedef dlib::matrix<double, 0, 1> sample_type;
sample_type myvect(64); // now the 64 is a runtime argument.
答案 2 :(得分:0)
作为一般情况,这是不可能的。虽然您可能想要编写以下内容:
template <int matrix_size>
struct sample_type : public dlib::matrix<double, matrix_size, 1>
{
sample_type data1;
sample_type<16> data2;
};
sampe_type<32> var32;
sampe_type<36> var36;
请注意,在模板2中定义了数据字段。将使用当前实例化参数创建第一个数据字段。将使用显式参数创建第二个数据字段。
如您所见,在模板内部似乎是您想要的,但外部只能使用常量。