【问题标题】:Writing a function which only takes compile-time constant parameters?编写一个只接受编译时常量参数的函数?
【发布时间】:2014-12-13 13:21:40
【问题描述】:

在 C++ 中有没有办法编写一个可以将编译时常量作为参数的函数,但如果传递一个与运行时相关的值,则会出现编译错误?具体来说,我有一个构造函数,其中使用空指针进行初始化会有可接受的行为,但使用非空指针进行初始化意味着正在发生一些奇怪的事情。

细节,如果他们重要的话:类可以用智能指针构造,但不应该用(非空)原始指针构造。为简洁起见,我希望能够直接从空指针文字进行初始化,但智能指针不允许从原始指针进行隐式转换。这意味着在每个使用点都需要额外的措辞来将空指针显式包装在智能指针中。通过将包装移动到构造函数中来消除重复代码会很好。

我知道这样做的一种方法是使用运行时检查传递的参数是否为非空,但如果可能的话,我更希望在编译时捕获一般的原始指针转换,并且仅在原始指针绝对为空时才允许编译。

(如果您的技术依赖于 C++11 或 C++14 功能,请务必提及。)

【问题讨论】:

  • 拥有一个不采用 any 指针并将其视为空智能指针的默认构造函数不是更容易吗? IE。两个构造函数,一个接受智能指针,一个接受 nothing ?为什么要让调用者有责任传递 NULL 而不是什么都不传递。
  • 您可以考虑使用运行时检查,将其限制为调试构建类型。如果你想坚持编译时检查,你也可以考虑static_assert

标签: c++ constructor null-pointer


【解决方案1】:

从 C++11 开始,您可以使用 std::nullptr_t 来满足您的需求。

Demo.

【讨论】:

    猜你喜欢
    • 2015-08-13
    • 2021-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-07
    • 1970-01-01
    • 2010-12-09
    相关资源
    最近更新 更多