我有一些代码,其中的名称空间可由用户配置为:
#pragma once
#ifdef GRAPHICS_NAMESPACE
namespace GRAPHICS_NAMESPACE {
#endif
class Foo {
}
#ifdef GRAPHICS_NAMESPACE
}
#endif
在cpp文件中,有
#ifdef GRAPHICS_NAMESPACE
using namespace GRAPHICS_NAMESPACE;
#endif
现在我有问题。我定义了-DGRAPHICS_NAMESPACE=Graphics
,并且有一个标头:
#pragma once
#include "Foo.h"
class Bar {
Foo foo;
}
但是Foo foo
给了我错误,因为Foo
在现在命名为Graphics
的命名空间中。我可以通过添加
#ifdef GRAPHICS_NAMESPACE
using namespace GRAPHICS_NAMESPACE;
#endif
到我的标头,但这不是很安全,因为它将在我包含标头的所有地方使用命名空间。还有其他解决方案吗?
答案 0 :(得分:2)
我会这样:
const config = {
headers: {
"Content-Type": "multipart/form-data"
}
};
const response = await axios.post(
`http://${GATEWAY}:5000/api/uploads/single`,
data,
config
);
答案 1 :(得分:2)
尽管我会说这不是安排事物的最佳方式,但我看到的情况更糟,并且解决问题的方法也很简单:
#ifdef GRAPHICS_NAMESPACE
#define GRAPHICS GRAPHICS_NAMESPACE
#else
#define GRAPHICS
#endif
...
GRAPHICS::Foo
如果您坚持使用此设计,则可以通过定义第二个宏来对其进行某种程度的清理:
class Bar {
#ifdef GRAPHICS_NAMESPACE
GRAPHICS_NAMESPACE::
#endif
Foo foo;
}
然后按照以下内容声明内容:
#ifdef GRAPHICS_NAMESPACE
#define GRAPHICS_CLASS(x) GRAPHICS_NAMESPACE:: x
#else
#define GRAPHICS_CLASS(x) x
#endif
最后,如果您坚持依赖预处理器来实现这种关键功能,则可能需要考虑花费更多时间阅读C ++书中关于该主题的内容。这些是C ++预处理器的相当基本,直接的用法,我希望在任何有关C ++预处理器及其工作原理的介绍中都应充分解释。