gpt4 book ai didi

c++ - 将命名空间赋予 C++ 中的现有库

转载 作者:搜寻专家 更新时间:2023-10-31 01:01:13 25 4
gpt4 key购买 nike

C++ 中的某些库不像 STL 那样使用命名空间。与 ncurses 一样,可以在没有命名空间的情况下调用那里可用的函数。它具有可全局访问的move()函数。现在,我在我的类文件中采用了 ncurses 库,它将具有 move 函数作为它的成员函数。如果我这样写我的课:

#include <ncurses.h>

class MyClass {
public:
void move (int x, int y) {
// moving
}
void do_something (int x, int y) {
move (x, y);
// do something
}
}

我不知道MyClass会调用哪个move()函数。我认为如果可以给 ncurses 库一个命名空间,问题就会消失,所以可以使用(例如)ncurses::move () 而不仅仅是 move ()。是否可以给它命名空间?如果不是,如果您发现类似这样的事情(当然不是更改函数名称),您会怎么做?

最佳答案

在这种情况下,您可以完全限定调用,而不是依赖基本上找到“最近”匹配的名称查找,如下所示:

::move(x, y);

这将在顶层查找 move,找到 ncurses、无命名空间、版本。

用于添加 ncurses 命名空间,不是真的。你可以试试:

namespace ncurses {
#include <ncurses.h>
}

但这真的很讨厌,几乎肯定无法正常工作。另一种方法是创建一个包装器 header ,手动将您感兴趣的所有函数添加到命名空间中,例如:

// wrapped_ncurses.h
#ifndef WRAPPED_NCURSES_H
#define WRAPPED_NCURSES_H
#include <ncurses.h>
namespace ncurses {
using ::move;
}
#endif

当然,您可以根据需要为整个库创建一个 C++ 包装器 (or try to find an existing one)。

关于c++ - 将命名空间赋予 C++ 中的现有库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29556093/

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