gpt4 book ai didi

c++ - 如何仅在调用函数B之后才允许调用函数A?

转载 作者:行者123 更新时间:2023-12-01 15:10:32 25 4
gpt4 key购买 nike

考虑以下代码类:

class A {
public:
int number;
vector<int> powers;

A () {
number = 5;
powers.resize(100);
}

long long getPower(int x) {
return powers[x];
}

void precompute() {
powers[0] = 1;
for (int i = 1; i < 100; i++) {
powers[i] = powers[i - 1] * number;
}
}
};

A类中,我们有一个称为 powers的 vector 和一个整数 number,其属性为 powers[k]在调用 numbers^k函数之后存储了数量的 precompute()。如果我们要回答“为某些整数 numbers^x计算 0 <= x < 100”形式的几个查询,则有必要预先计算所有这些幂,并在需要它们作为恒定时间操作时将它们返回(请注意:这不是一个问题,我实际上正面临着。为了举例说明,我解决了这个问题。请忽略 numbers^x会超过 long long的最大值的事实。

但是,存在一个问题:用户必须先调用 precompute()函数,然后才能调用 getPower()函数。

这使我想到以下问题:是否有某种不错的方法来强制约束某些函数 A仅在调用函数 B之后才能被调用?当然,可以只使用 flag变量,但是我想知道是否有更优雅的方法可以做到这一点,从而使其成为编译时错误。

另一个选择是始终在构造函数中调用 precompute()函数,但是如果我们不总是首先调用 precompute(),则这可能不是最佳解决方案。如果调用 precompute()足够昂贵(从计算上来说),则此方法将不是可取的。

与运行时错误相比,我更希望获得编译时错误,但是我乐于接受所有方法。有人有什么想法吗?

最佳答案

解决您的问题的一种方法是在precompute的构造函数中调用class A函数。

或者,如注释部分所建议,您可以使函数getPower检查一个标志,该标志指定precompute是否已被调用,否则,请自行执行调用或打印错误消息。

我想不出一种方法来强制在编译时执行此检查。但是,如果要从发行版本中消除此运行时检查,则可以使用条件编译,以便仅在调试版本中包括这些检查,例如通过使用 assert 宏或使用预处理程序指令,例如:

// note that NDEBUG is normally only defined in release builds, not debug builds

#ifdef NDEBUG
//check for flag here and print error message if flag has unexpected value
#endif

关于c++ - 如何仅在调用函数B之后才允许调用函数A?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62461049/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com