当前位置:  开发笔记 > 编程语言 > 正文

C++服务提供商

如何解决《C++服务提供商》经验,为你挑选了1个好方法。

我一直在学习C++,来自C#,我已经习惯使用服务提供者:基本上是一个Dictionary .不幸的是,我无法弄清楚如何在C++中做到这一点.所以问题基本上是:

    我如何在C++中创建字典.

    我如何使用'Type',据我所知,C++中没有'Type'.

    与上面相同,但使用'object'.

谢谢!



1> Eclipse..:

我假设您正在尝试将类型映射到单个对象实例.你可以尝试这些方面:

#include 
#include 
#include 
using namespace std;

class SomeClass
{
public:
    virtual ~SomeClass() {} // virtual function to get a v-table
};

struct type_info_less
{
    bool operator() (const std::type_info* lhs, const std::type_info* rhs) const
    {
        return lhs->before(*rhs) != 0;
    }
};

class TypeMap
{
    typedef map  TypenameToObject;
    TypenameToObject ObjectMap;

public:
    template  
    T *Get () const
    {
        TypenameToObject::const_iterator iType = ObjectMap.find(&typeid(T));
        if (iType == ObjectMap.end())
            return NULL;
        return reinterpret_cast(iType->second);
    }
    template  
    void Set(T *value) 
    {
        ObjectMap[&typeid(T)] = reinterpret_cast(value);
    }
};

int main()
{
    TypeMap Services;
    Services.Set(new SomeClass());
    SomeClass *x = Services.Get();
}

在C++类型中,它们本身并不是第一类对象,但至少类型名称将是唯一的,因此您可以通过它来键入.

编辑:名称实际上并不保证是唯一的,因此请继续使用type_info指针并使用before方法进行比较.

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有