你在哪里为复杂的地图定义typedef?

时间:2009-07-20 19:46:32

标签: c++ stl

一般问题:通常在哪里定义类,命名空间。

我的情况:

我只在我的类实现中使用这个地图:

std::map<const std::pair<string, string>,const string*>

我想知道将它放在课堂(公共场所:)或封闭头文件中的好地方在哪里?我没有名称空间

3 个答案:

答案 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)

这取决于你是否需要这种类型的公共接口?如果是这样,那么我会在课堂的公共部分声明它。如果你只在类的私有部分使用它,那么在那里声明它。如果你只在实现中使用它,那么在那里声明它。一般情况下,永远不要在头文件中的全局命名空间中声明它(或者如果确实在名称前加上不会发生冲突的内容)。

这里的经验法则是尽可能使减速程序可见/可访问程序的最小子集。