代码之家  ›  专栏  ›  技术社区  ›  Federico klez Culloca

获取类的方法列表

c++
  •  10
  • Federico klez Culloca  · 技术社区  · 14 年前

    有没有方法可以为C++类的每个方法创建一个指针列表(例如数组)?

    像这样的 Type.GetMethods() 在.NETFramework中,但只使用标准C++。

    7 回复  |  直到 14 年前
        1
  •  9
  •   JaredPar    14 年前

    不,这在一般情况下是不可能的。C++没有与.NET相同的元数据基础结构。

    你能给我们提供一个你想使用这些信息的场景吗?可能有更好的方法可以用C++来使用

        2
  •  3
  •   James Curran    14 年前

    没有办法。

    事实上,即使在对象代码级别,静态类成员函数也无法与独立函数区分开来,类实例函数也无法与传递对象指针的独立函数区分开来。

    如果你知道你的编译器名称混乱方案,并有权访问预先链接的目标代码,你也许可以解码它,但这是一个不确定的结果大量的工作。

        3
  •  2
  •   Mark Ransom    14 年前

    制作一份.h文件的副本,然后在编辑器中进行破解。

        4
  •  1
  •   Jerry Coffin    14 年前

    如果你 想这么做,第8章

    这根本做不到,但我认为它会起作用,如果你能接受他所披露的其他限制的话。

        5
  •  1
  •   gomons    11 年前

    在我的项目中,我使用特殊的宏来声明和定义类成员,然后 我可以得到班级成员的名单。例如:

    类别声明:

    #define DECLARE_MODULE_FUNCTION( function_name ) \
    JsonObject function_name( JsonObject value );
    
    #define DEFINE_MODULE_FUNCTION( function_name ) \
    static ModuleFunctionAdder< LotteryOddsModule > \
    __LINE__##function_name( L ## #function_name , &LotteryOddsModule::function_name );    \
    JsonObject LotteryOddsModule::function_name( JsonObject value )
    
    template< typename T >
    class ModuleFunctionAdder;
    
    class LotteryOddsModule
    {
    public:
        typedef JsonObject ( LotteryOddsModule::*ModuleFunction )( JsonObject );
    
        JsonValue Invoke( JsonValue json_value );
    
        DECLARE_MODULE_FUNCTION( GenerateK1AndK2 );
    
    private:
        friend class ModuleFunctionAdder< LotteryOddsModule >;
        static std::map< WString , ModuleFunction > _module_functions;
    };
    
    template<>
    class ModuleFunctionAdder< LotteryOddsModule >
    {
    public:
        ModuleFunctionAdder( WString func_name , LotteryOddsModule::ModuleFunction func )
        {
            LotteryOddsModule::_module_functions[ func_name ] = func;
        }
    };
    

    类别定义:

    JsonValue LotteryOddsModule::Invoke( JsonValue json_value )
    {
        return ( this->*_module_functions[ L"GenerateK1AndK2" ] ) ( json_value.get_obj() );
    }
    
    DEFINE_MODULE_FUNCTION( GenerateK1AndK2 )
    {
        //...
    }
    
        6
  •  0
  •   Artem Barger    14 年前

    在C++对象和类中没有元类,因此不能涉及反射,所以答案是否定的。

        7
  •  0
  •   Preet Sangha    14 年前

    typeid 但不是方法信息。