动态类型定义 我在C++类机器库(DLIB)中有一个类,它看起来是这样的: typedef dlib::matrix<double, 64, 1> sample_type; typedef dlib::矩阵样本类型;

动态类型定义 我在C++类机器库(DLIB)中有一个类,它看起来是这样的: typedef dlib::matrix<double, 64, 1> sample_type; typedef dlib::矩阵样本类型;,c++,typedef,C++,Typedef,但64实际上是一个变量。我希望typedef在整个类中可见,但我希望在调用构造函数时第二个参数(64)是一个参数。如何在保持typedef随处可见的情况下实现这一点?对于当前的设计,这是不可能的,因为模板参数必须在编译时已知,而构造函数的参数没有该限制 这是因为任何模板扩展都应该被视为它自己的类型;模板参数是类型的一部分(std::vector是与std::vector不同的类型)。一般情况下,这是不可能的。尽管您可能希望编写以下内容: template <int matrix_size&

但64实际上是一个变量。我希望typedef在整个类中可见,但我希望在调用构造函数时第二个参数(64)是一个参数。如何在保持typedef随处可见的情况下实现这一点?

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


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

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

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;
模板
结构示例_类型:public dlib::matrix
{
样本类型数据1;
样本类型数据2;
};
sampe_型var32;
sampe_型var36;
请注意,在模板中定义了2个数据字段。第一个数据字段将使用当前实例化参数创建。第二个数据字段将使用显式参数创建


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

这实际上是dlib网页上的一个示例。你要做的是:

typedef dlib::matrix<double, 0, 1> sample_type;
sample_type myvect(64); // now the 64 is a runtime argument.
typedef dlib::矩阵样本类型;
样本_类型myvect(64);//现在64是一个运行时参数。

在@R.MartinhoFernandes的注释上展开:模板展开发生在编译时,所以模板参数必须是编译时已知的常量。为什么不直接创建一个helper函数呢?