我想问一下C++中typedef的正确位置.
Version1:类外的typedef
typedef std::pair<std::string, int> StrIntPair;
typedef std::vector<StrIntPair> StrIntPairVec;
class MyData
{
public:
    MyData(){};
    ~MyData(){};
private:
    void addInfo(const StrIntPair &info)
    {
        infoVec.push_back(info);
    }
    StrIntPair info;
    StrIntPairVec infoVec;
};
Run Code Online (Sandbox Code Playgroud)
Version2:类public中的typedef
class MyData
{
public:
    MyData(){};
    ~MyData(){};
    typedef std::pair<std::string, int> StrIntPair;
    typedef std::vector<StrIntPair> StrIntPairVec;
private:
    void addInfo(const StrIntPair &info)
    {
        infoVec.push_back(info);
    }
    StrIntPair info;
    StrIntPairVec infoVec;
};
Run Code Online (Sandbox Code Playgroud)
版本3:类私有中的typedef
class MyData
{
public:
    MyData(){};
    ~MyData(){};
private:
    typedef std::pair<std::string, int> StrIntPair;
    typedef std::vector<StrIntPair> StrIntPairVec;
    void addInfo(const StrIntPair &info)
    {
        infoVec.push_back(info);
    }
    StrIntPair info;
    StrIntPairVec infoVec;
};
Run Code Online (Sandbox Code Playgroud)
哪个版本是最佳做法?
lub*_*bgr 12
这取决于您使用类型别名的位置.我建议你
编译器只会强制太窄的别名范围(例如,您使用在该类之外的类的私有部分中定义的类型别名),如果您选择不必要的许可范围,则不会抱怨(例如,您公开声明别名,但仅在类实现中使用它).因此,努力选择尽可能最窄的范围,这与隐藏实现细节一致.
作为旁注,您可能需要考虑声明类型别名using StrIntPair = std::pair<std::string, int>;,请参阅Effective Modern C++中的第9项.不过,这对上述情况没有影响.
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           250 次  |  
        
|   最近记录:  |