动态类型定义
dynamic typedef
我在 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 个数据字段。将使用当前实例化参数创建第一个数据字段。将使用显式参数创建第二个数据字段。
如您所见,在模板内部,它似乎是您想要的,但在外部只能使用常量。
相关文章:
- 使用QJsEngine在Qt中注册自定义类型
- 在UE4中使用未定义类型'UTextBlock'
- 修改"std::set"中用户定义类型的值
- 当我使用自定义类型创建动态数组时,即使使用字符串,它似乎也不起作用
- QtQuick - qml:28:错误:未知方法返回类型:自定义类型
- 如何使自定义类型在unordered_map中用作键
- 在 C++20 中是否不再允许在 std 中对程序定义类型的函数模板进行专用化?
- Qt5 远程对象 + 自定义类型,但不在 POD 中
- 为什么转换函数声明不需要至少一个定义类型说明符
- 标准::原子中的自定义类型
- 如何使用自定义类型声明Arduino数组?
- 如何在 Cython 中定义返回 cpp 定义类型的函数?
- 使用自定义访问者时具有自定义类型的提升变体失败(源自 boost::static_visitor)
- 您可以将binary_search应用于具有自定义类型的矢量吗?
- 在自定义类型图中重用 SWIG 映射
- 扩展自定义类型的spdlog
- vim使用户定义类型的COLOR与C++中的基本类型相同
- 重载自定义类型的 std::to_string 和 std::to_chars?
- 具有未声明/未定义类型的 typedef 结构
- 函数重载:内置类型与用户定义类型