0

我有两个版本的 C 函数,它们在速度和内存使用方面相互权衡。这些函数位于一个跨多个程序共享的 .cpp 文件中。我想使用一个函数指针,以便我可以在两个实现之间来回切换,并让这些更改贯穿我程序中的所有文件。

组合.h(提取)

long chooseRecursive (int n, int r);
long chooseLookup (int n, int r);
void foo (int n, int r);
static long (*choose)(int, int) = chooseRecursive;

组合.cpp(提取)

long chooseRecursive (int n, int r) { cerr << "Recursive\n"; }
long chooseLookup (int n, int r) { cerr << "Lookup\n"; }
void foo (int n, int r) { choose(n, r); }

Main.cpp(提取)

int main(int argc, char* argv []) {
    choose = chooseLookup;
    choose(10, 5);
    foo(10, 5);
}

输出是:

Lookup
Recursive

为什么 foo 函数不使用chooseLookup 而不是chooseRecursive?我该如何解决?有没有更好的方法可以用来实现相同的目标?

预先感谢您的帮助!

4

1 回答 1

3

就目前而言,每个包含 Combination.h 的 .cpp 文件都有自己的staticvariable choose。您的代码main更新 main.cpp 的副本,但不会更新 Combination.cpp 中的版本。

解决此问题的一种简单方法是将 Combination.h 更改为声明chooseextern

extern long (*choose)(int, int);

然后在 Combination.cpp 中实现/初始化它

long (*choose)(int, int) = chooseRecursive;
于 2013-10-07T16:06:58.857 回答