我有一个类家族,每个子类都需要一个映射,但是键将具有不同的类型,尽管它们都将对映射执行完全相同的操作。同样,两种情况下的值都是字符串。
到目前为止,我的代码类似于下面的示例,我的目标是通过
具有通用密钥。
除了STL外,不使用任何其他库

class A{
 public:
    /*
     * More code
     */
};


class subA1 : public A{
public:
    void insertValue(long id, std::string& value){
        if(_theMap.find(id) == _theMap.end())
        {
            _theMap[id] = value;
        }
    }

 private:
     std::map<long,std:string> _theMap;
};

class subA2 : public A{
public:
    void insertValue(std::string& id, std::string& value){
        if(_theMap.find(id) == _theMap.end())
        {
            _theMap[id] = value;
        }
    }
private:
     std::map<std::string,std:string> _theMap;

};

最佳答案

您可以将subA1subA2合并到一个模板类中,例如:

class A{
 public:
    /*
     * More code
     */
};

template <typename KeyType>
class subA : public A {
public:
    void insertValue(const KeyType &id, const std::string& value) {
        if(_theMap.find(id) == _theMap.end()) {
            _theMap.insert(std::make_pair(id, value));
        }
    }

 private:
     std::map<KeyType, std:string> _theMap;
};

然后,您可以根据需要创建typedef:
typedef subA<long> subA1;
typedef subA<std::string> subA2;

或者,如果您需要实际的派生类:
class subA1 : public subA<long>
{
    ...
 };

class subA2 : public subA<std::string>
{
    ...
};

10-08 08:19