gpt4 book ai didi

c++ - 使用模板在 C++ 中实现通用消息传递

转载 作者:太空宇宙 更新时间:2023-11-04 11:28:36 24 4
gpt4 key购买 nike

我正在尝试实现通用消息传递以在 C++ 中的类之间发送通用类型的消息,但是我坚持使用通用监听器和虚函数调用来处理各种类型的消息。编译器无法找到虚拟句柄消息函数的符号并给出错误:

Undefined symbols for architecture x86_64:
"messaging::IMessageListener<int>::handleMessage(int const&)", referenced from:
vtable for messaging::IMessageListener<int> in main.o
ld: symbol(s) not found for architecture x86_64

这是我目前所拥有的:

#ifndef MESSAGING_HPP
#define MESSAGING_HPP

#include <vector>

namespace messaging{

template<typename T> class IMessageListener;

template <typename T> class IMessageContext {

std::vector<IMessageListener<T>* > _listeners;

public:
template<typename T2>
void attachListener(IMessageListener<T>* _listener){
_listeners.push_back(_listener);
}

template<typename T2>
void detach(IMessageListener<T>* _listener){
_listeners.erase(std::remove(_listeners.begin, _listeners.end(), _listener), _listeners.end());
}

template<typename T2>
void send(const T& _msg){
typename std::vector<IMessageListener<T>* >::iterator i;
for(i = _listeners.begin(); i != _listeners.end(); ++i){
(*i)->handleMessage(_msg);
}
} };

template<typename T> class IMessageListener { public:
virtual void handleMessage(const T&); };

} //namespace messaging

#endif // MESSAGING_HPP

以及派生类:

class context : public messaging::IMessageContext<int>
{
public:
void go(const int &i)
{
send<int>(i);
}
};

class listener : public messaging::IMessageListener<int>
{
public:
virtual void handleMessage(const int &i){
std::cout << i << std::endl;
}
};

主要功能:

int main()
{
context c;
listener l;
c.attachListener<int>(&l);
c.go(1234);

return 0;
}

最佳答案

您还没有为 IMessageListener<T>::handleMessage 提供定义:

template<typename T> class IMessageListener { public:
virtual void handleMessage(const T&);
// ^
};

如果您打算让它未实现,请将其设为纯虚拟:

template<typename T> class IMessageListener { public:
virtual void handleMessage(const T&) = 0;
// ^^^
};

关于c++ - 使用模板在 C++ 中实现通用消息传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25721146/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com