【问题标题】:C++: Simultaneous use of Integers and References to IntegersC++:同时使用整数和对整数的引用
【发布时间】:2021-08-19 16:02:09
【问题描述】:

考虑以下表示具有上限和下限的整数参数的类:

class Parameter
{
protected:
    int value;
    int minval;
    int maxval;
};

我有一个参数对象列表。有时,参数的 minval/maxval 将是列表中另一个参数的值。其他时候,它们只是整数文字。据我了解,我可以将 minval/maxval 设为对另一个参数值的引用或整数文字,但不能同时使用两者,因为 int& != int。

我该如何解决这个问题?

【问题讨论】:

  • 如果一个Parametervalue 发生变化,改变了其他一些Parametermaxval,而现在第二个Parametervalue 无效,会发生什么?
  • 首先,我要定义一个联合类型“IPU”,由一个 int 和一个 Parameter* 组成。然后,我会采用约定,当你想像使用 int 一样使用这种类型时,将 Parameter* 设为 NULL;这样,给定一个 IPU,您可以轻松地将其解码为整数,例如,“val = ipu.parameter == NULL ? ipu.int : ipu.parameter”。有意义吗?
  • 如果它们是 const 引用,它们可以在构造函数中初始化 - 并且可以引用文字。诀窍是编写执行初始化所需的一组构造函数(带有初始化列表)。如果您需要以某种方式重新安装引用,请创建一个新对象(因为引用只能在创建时初始化,并且永远不会重新安装)。
  • "我有一个 Parameter 对象列表。有时,Parameter 的 minval/maxval..." sometimes 是否意味着在一个列表中或为每个参数类型不同的列表?
  • 如果/当有循环引用时会发生什么?

标签: c++ object reference


【解决方案1】:

如果没有更多信息,这很难回答,但如果您希望同一个类拥有可以是 int 或引用 int 的成员,这听起来像是一个用例对于std::variant,即

class Parameter
{
protected:
    int value;
    std::variant<int, int*> minval;
    std::variant<int, int*> maxval;
};

注意这里需要一个指针类型,因为variants cannot hold references

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-02
    • 2023-03-04
    • 1970-01-01
    • 2017-10-24
    • 2021-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多