【问题标题】:Using pointer as a template parameter使用指针作为模板参数
【发布时间】:2021-04-17 04:38:00
【问题描述】:

在 C++ 中我可以这样做:

template <typename T, T* Ptr>
class MyClass {};

我有两个问题:

  1. 在编译时我在哪里可以获得除 nullptr 之外的指针?

  2. 如何使用此语言功能?当然,对于实际案例来说会很有趣,但似乎这是一种相当具体的可能性,因此人工示例也很合适。

【问题讨论】:

  • 您可以在编译时获得指向具有静态存储持续时间和链接的任何内容的指针。

标签: c++ pointers templates


【解决方案1】:

您可以在编译时获得指向具有静态存储持续时间和链接的任何内容的指针:

static const int values[] = {4, 8, 15, 16, 23, 42};
MyClass <const int, values> myClass;

static char magic = '*';
MyClass <char, &magic> myClass2;

Demo

【讨论】:

  • 什么时候有用?
  • 虽然您需要在模板中使用 constexpr 指针,但将名称添加到模板类可能很有用。我已经用它来将类序列化为 Json。
  • on 选项,它在嵌入式系统中很有用,在嵌入式系统中,您有不同部分的静态内存映射 - 并且它是常量。
  • @Jarod42,“给模板类添加名称”是什么意思?您也可以为此使用空结构。或者也许这是所有解决方案中的一种?
  • 这是一种可用的工具。它(可能)有替代方案。运行时指针可能也足够了。也可以存在于泛型编程中,因此指针没有特殊情况。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-10
相关资源
最近更新 更多