动态类型定义

dynamic typedef

本文关键字:定义 类型 动态      更新时间:2023-10-16

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

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

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

这对于当前设计是不可能的,因为模板参数必须在编译时已知,而构造函数的参数没有该限制。

这样做的原因是,任何模板扩展都应该被视为它自己的类型;模板参数是类型的一部分(std::vector<int>是与std::vector<float>不同的类型)。

这实际上是 dlib 网页上的常见问题之一。 你做的是这样的:

typedef dlib::matrix<double, 0, 1> sample_type;
sample_type myvect(64); // now the 64 is a runtime argument.

一般来说,这是不可能的。尽管您可能希望编写以下内容:

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

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