java - 有什么办法可以知道C++模板中的函数是什么?

标签 java c++ templates

我正在尝试使用模板将用 Java 编写的代码重写为 C++。这是一个例子。

代码如下所示:

class IBookUpdatedHandler {
public:
    virtual ~IBookUpdatedHandler() {}
    virtual void updateBook(int bookIndex)=0;
};

class IBookFiredHandler {
public:
    virtual ~IBookUpdatedHandler() {}
    virtual void fireBook(int bookIndex)=0;
};


template <typename T>
class Dispatcher {
private:
    list<T> listeners;
    const char* methodName;

public:
    Dispatcher(const char* name) {
        this->methodName = name;
    }

    void add(T listener) {
        listeners.push_back(listener);
    }

    void dispatch() {
        // listeners loop
        for(typename list<T>::iterator pos = listeners.begin(); pos != listeners.end(); pos++)
        {
            // i don't know what is in the box .. (list<T>)..
            // call ..
            // listener could have (*pos)->do_somethig() ?
        }
    }
};

Dispatcher<IBookUpdatedHandler*> *dispatcher = new Dispatcher<IBookUpdatedHandler*>("updateBook");
Dispatcher<IBookFiredHandler*> *dispatcher = new Dispatcher<IBookFiredHandler*>("fireBook");

我想在 dispatch() 函数中调用 updateBookfireBook 但是,在 C++ 中,我认为没有办法知道类型名称中的内容。

是否有与 Java 的 getMethod 等效的 C++?

最佳答案

您不能像在 Java 中那样在运行时选择函数。你可以使用 dynamic_cast<>确定对象的类型,然后调用适当的函数。

我认为更好的解决方案是让两个类共享相同的功能:

class IBookGenericHandler {
public:
    virtual void genericBook(int bookIndex)=0;
};

class IBookUpdatedHandler:public IBookGenericHandler {
public:
    virtual ~IBookUpdatedHandler() {}
    virtual void updateBook(int bookIndex)=0;
    virtual void genericBook(int bookIndex) { updateBook(bookIndex) }
};

class IBookFiredHandler:public IBookGenericHandler {
public:
    virtual ~IBookUpdatedHandler() {}
    virtual void fireBook(int bookIndex)=0;
    virtual void genericBook(int bookIndex) { fireBook(bookIndex) }
};

然后你可以调用genericBook在你的for循环,它负责处理需要调用这两个函数中的哪一个。

关于java - 有什么办法可以知道C++模板中的函数是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10244045/

相关文章:

java - 从日期对象中删除时间?

Java程序从eclipse导出后无法运行

java - UDP 数据报 Socket 编程与服务器在 JAVA 和客户端在 C++

c++ - 模板参数中的 Const 关键字

c++ - c++模板规范和重载的解析

java - 计算java字符串中句子的个数

c++ - 指向常量的指针。指针改变了,但 const 没有改变

c++ - 得到 SPOJ PLD 的错误答案

c++ - 我可以将引用类型传递给模板以指定以下非类型模板参数的类型吗?

java - 读取 Avro 文件给出 AvroTypeException : missing required field error (even though the new field is declared null in schema)