动态typedef

时间:2012-06-23 06:47:39

标签: c++ typedef

我在c ++机器库(dlib)的类中有一个typedef,如下所示:

typedef dlib::matrix<double, 64, 1> sample_type;

除了64实际上是一个变量。我希望typedef在整个类中都可见,但我希望第二个参数(64)在调用构造函数时成为参数。我怎样才能实现这一点,同时保持typedef在任何地方都可见?

3 个答案:

答案 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中定义了数据字段。将使用当前实例化参数创建第一个数据字段。将使用显式参数创建第二个数据字段。

如您所见,在模板内部似乎是您想要的,但外部只能使用常量。