2

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

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

除了 64 实际上是一个变量。我希望 typedef 在整个类中可见,但我希望第二个参数(64)是调用构造函数时的参数。我怎样才能做到这一点,同时保持 typedef 随处可见?

4

3 回答 3

2

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

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

于 2012-06-23T06:50:59.367 回答
2

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

typedef dlib::matrix<double, 0, 1> sample_type;
sample_type myvect(64); // now the 64 is a runtime argument.
于 2013-03-02T05:35:44.350 回答
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 个数据字段。第一个数据字段将使用当前实例化参数创建。第二个数据字段将使用显式参数创建。

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

于 2012-06-23T08:26:37.047 回答