对于我的项目,我正在使用一些非常复杂的数据结构,例如
std::unordered_map<int, std::list<std::shared_ptr<const Foo>>>
Run Code Online (Sandbox Code Playgroud)
为此,我想声明类型别名以提高可读性。我在其上构建项目的代码已经通过将using语句全局放在头文件中来实现:
std::unordered_map<int, std::list<std::shared_ptr<const Foo>>>
Run Code Online (Sandbox Code Playgroud)
由于我的C ++知识有点生锈,所以我只是采用了这种样式-但现在我读到,using以这种方式使用可能会出现问题,因为它将这种别名强制应用于包含此标头的所有内容。
尽管进行了大量的谷歌搜索,但我找不到如何正确处理此问题的具体答案,只有很多关于不该做什么的陈述。因此,我只是将use放在类中:
// bar.h
#ifndef BAR_H
#define BAR_H
#include <unordered_map>
#include <list>
#include <memory>
#include "foo.h"
using FooTable = std::unordered_map<int, std::list<std::shared_ptr<const Foo>>>;
class Bar {
FooTable create_foo();
};
#endif
Run Code Online (Sandbox Code Playgroud)
但是,这样做的缺点是,我需要在源文件中重新声明别名:
// bar.h
#ifndef BAR_H
#define BAR_H
#include <unordered_map>
#include <list>
#include <memory>
#include "foo.h"
class Bar {
using FooTable = std::unordered_map<int, std::list<std::shared_ptr<const Foo>>>;
FooTable create_foo();
};
#endif
Run Code Online (Sandbox Code Playgroud)
尽管这似乎可行,但我不确定这是否安全...而且我的直觉告诉我这有点丑陋。因此,在我像这样重写整个项目之前,我想过要问:有没有一种更好/更优雅/更安全的方法呢?还是我应该完全避免在头文件中使用类型别名?