【问题标题】:Reflection in C++. How to pass a func as a parameter in c++C++ 中的反射。如何在c ++中将func作为参数传递
【发布时间】:2015-01-29 21:45:38
【问题描述】:

我是 C++ 新手。所以我正在尝试做一些微不足道但无法弄清楚如何做的事情。

我有一个名为 Method 的类:

class Method{

private:
    std::string nameMethod;
    Func f;

public:
    Method(std::string name,Func fun){
        nameMethod=name;
        f=fun;
    };

我想创建一个名为 methDaniel 的 Method 类型的对象,它有

  1. 字符串名称方法 = addDaniel.
  2. f = 打印“Daniel”的函数。

如何在 main.cpp 文件中执行此操作?

#include "Method.h"

using namespace std;

typedef void (*t_somefunc)();

void addDaniel(){
    cout<<"Daniel";
}


int main(){
    addDaniel();

    t_somefunc afunc = &addDaniel;
    Method* methDaniel = new Method("addDaniel",afunc);

}

【问题讨论】:

  • 为什么不直接使用std::map&lt;std::string,t_somefunc&gt;Func 实际上是什么?
  • "depends" 但我可能会使用std::unordered_map&lt;std::string,std::function&lt;FUNC&gt;&gt;(语法有点错误,但你明白了)
  • 您不需要new 在 C++ 中创建对象。
  • 顺便说一句,C++ 中的 function 在许多其他 OO 语言中被称为 method,并且该术语通常可以互换使用。这可能是我的失败,当然也不是彻底的错误,但是一个名为 method 的类看起来可能会令人困惑,而且通常读取不正确。

标签: c++ function reflection methods


【解决方案1】:

将用于定义t_somefunctypedef 移至“Method.h”。

f 的类型从Fun 更改为t_somefunc

方法.h:

typedef void (*t_somefunc)();

class Method{

private:
    std::string nameMethod;
    t_somefunc f;

public:
    Method(std::string const& name, t_somefunc fun) : nameMethod(name), f(fun){}

然后,在main

Method* methDaniel = new Method("addDaniel", addDaniel);

【讨论】:

  • 您好,感谢您的回复。假设 typedef void (t_somefunc)(Object);如何将对象传递给 main 方法中的函数?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-25
  • 2020-02-10
  • 2016-10-27
  • 1970-01-01
相关资源
最近更新 更多