一般问题:通常在哪里定义类,命名空间。
我的情况:
我只在我的类实现中使用这个地图:
std::map<const std::pair<string, string>,const string*>
我想知道将它放在课堂(公共场所:)或封闭头文件中的好地方在哪里?我没有名称空间
答案 0 :(得分:12)
如果它只在你的班级,我通常把它放在私人部分的顶部:
class Foo
{
public:
void some_functions(void);
private:
typedef std::pair<std::string, std::string> StringPair;
typedef std::map<StringPair, std::string> StringPairMap;
StringPairMap _stringMap;
}
澄清一下,与大多数事情一样,您希望尽可能将这些内容指定为本地内容。变量应该这样做:在你到达循环之前,你没有为for循环定义int i
等。
同样,如果你的班级在内部使用这些typedef,请按照我上面的说法进行操作。如果只有类中的特定函数需要typedef,请将typedef放在该函数的开头。
如果您需要将此typedef公开给该类的客户,我希望将typedef放在public
部分的顶部。
答案 1 :(得分:1)
把它放在你使用它的地方。如果您在头文件的私有部分中使用它,请在那里声明typedef。如果仅在.cpp文件的实现代码中使用它,请在那里声明typedef。
答案 2 :(得分:0)
这取决于你是否需要这种类型的公共接口?如果是这样,那么我会在课堂的公共部分声明它。如果你只在类的私有部分使用它,那么在那里声明它。如果你只在实现中使用它,那么在那里声明它。一般情况下,永远不要在头文件中的全局命名空间中声明它(或者如果确实在名称前加上不会发生冲突的内容)。
这里的经验法则是尽可能使减速程序可见/可访问程序的最小子集。