基于C++的反射功能

需求:

利用C++的发射机制,实现根据字符串创建实例对象。

代码:

#ifndef OBJECT_H
#define OBJECT_H

#include <string>
#include <map>

typedef void* (*Constructor)();

class CObjectFactory
{
public:
    static void registerClass(std::string className, Constructor constructor)
    {
        constructors()[className] = constructor;
    }

    static void* createObject(const std::string& className)
    {
        Constructor constructor = NULL;

        if(constructors().find(className) != constructors().end())
            constructor = constructors().find(className)->second;

        if ( constructor == NULL )
            return NULL;

        return (*constructor)();
    }

private:
    inline static std::map<std::string, Constructor>& constructors()
    {
        static std::map<std::string, Constructor> instance;
        return instance;
    }
};


#define REGISTER_CLASS(class_name) \
class class_name##Helper { \
public: \
    class_name##Helper() \
    { \
        CObjectFactory::registerClass(#class_name, class_name##Helper::creatObjFunc); \
    } \
    static void* creatObjFunc() \
    { \
        return new class_name; \
    } \
}; \
class_name##Helper class_name##helper;


#endif

使用:

类实现的时候,进行注册。

 场景是什么?

类似与这种流程图,有很多算子,我在注册的时候,将算子的类名作为参数,拖拽结束后,获取类名字符串,自动创建对象。

问题:

构造的时候,没办法传参。

相关推荐

  1. C# 反射基础

    2024-03-13 18:00:07       39 阅读
  2. C# 反射

    2024-03-13 18:00:07       37 阅读
  3. C# 反射

    2024-03-13 18:00:07       27 阅读
  4. C# 反射

    2024-03-13 18:00:07       22 阅读
  5. <span style='color:red;'>C</span>#-<span style='color:red;'>反射</span>

    C#-反射

    2024-03-13 18:00:07      17 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-13 18:00:07       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-13 18:00:07       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-13 18:00:07       82 阅读
  4. Python语言-面向对象

    2024-03-13 18:00:07       91 阅读

热门阅读

  1. 【数据结构学习笔记】选择排序

    2024-03-13 18:00:07       32 阅读
  2. Leetcode刷题笔记——贪心篇

    2024-03-13 18:00:07       34 阅读
  3. 完整的模型训练套路及GPU的利用

    2024-03-13 18:00:07       43 阅读
  4. 听力 3.12

    2024-03-13 18:00:07       37 阅读
  5. 万能近似定理

    2024-03-13 18:00:07       46 阅读
  6. C++之std::move

    2024-03-13 18:00:07       42 阅读
  7. Chapter 8 - 24. Congestion Management in TCP Storage Networks

    2024-03-13 18:00:07       40 阅读
  8. 小白如何快速入门计算机视觉?

    2024-03-13 18:00:07       39 阅读
  9. vue-router

    2024-03-13 18:00:07       33 阅读
  10. 牛客网KY156 百鸡问题

    2024-03-13 18:00:07       50 阅读