C++ 多重继承和模板

标签 c++ templates inheritance image-processing multiple-inheritance

众所周知,C++允许多重继承。

上下文

我正在实现一个处理网络,其中一些处理节点相互链接,以通过一种修改后的观察者模式交换不同的数据。

可以发送某种类型数据的节点是“DataSender”,然后扩展这个抽象类。

可以接收某种类型数据的节点是“DataReceiver”,然后扩展这个抽象类。

这是我的一段代码:

DataReceiver.h

template <typename TReceivedData>
class DataReceiver {
        public:
            void receiveData(TReceivedData* receivedData)
            {
                m_receivedData = receivedData;
            }
            TReceivedData* getReceivedData()
            {
                return(m_receivedData);
            }
        private:
            TReceivedData* m_receivedData;

DataSender.h

template <typename TSentData>
class DataSender {
            public:
                void sendData(TSentData* sentData) 
                {
                    set<DataReceiver<TSentData>*>::const_iterator it;
                    for(it = m_receiverList.begin(); it != m_receiverList.end(); ++it)
                        (*it)->receiveData(sentData);
                }

                void addDataReceiver(DataReceiver<TSentData>* dataReceiver) 
                {
                    m_receiverList.insert(dataReceiver);
                }

                void removeDataReceiver(DataReceiver<TSentData>* dataReceiver) 
                {
                    m_receiverList.erase(dataReceiver);
                }

            private:
                set<DataReceiver<TSentData>*> m_receiverList;
        };

然后通过扩展这些抽象类中的一个或两个来简单地实现一个新节点。

问题

我想要一个发送“图像”和“文本”类型数据的节点:然后我有一个节点: 与:

class Node : public DataSender<Image>, DataSender<Text>

好吧,我想你已经看到我的问题了,编译不允许这样做,因为如果我启动的话会有歧义:

Node* node;
node->sendData(<my argument>);

因为它无法区分应该使用父类(从继承)中的哪个 sendData()(这是多重继承的常见问题)。

  • 1) 有没有一种方法可以使用 sendData() 来解决歧义(我不确定有没有?

  • 2) 有没有其他方法可以解决我的沟通问题? (我绝对希望有机会让最终用户想要创建一个发送/接收数据的节点,只需扩展一个接口(interface)之类的东西就可以轻松地做到这一点,并且数据应该在不同的“ channel ”上:例如一个节点可以能够处理文本和图像,但只会发送图像...

谢谢你的帮助,

朱利安

最佳答案

它不是很漂亮,但你可以告诉你打算调用哪个基类的函数

node->DataSender<Text>::sendData(<my argument>);

关于C++ 多重继承和模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6944014/

相关文章:

c++ - 分配 vector

c++ - 什么是 C++ 委托(delegate)?

java - Java Socket 客户端和 C++(基于 Boost)服务器之间的联网

c++ - 传入的模板类型与基本类型或对象的比较

c++ - 如何在类定义中声明指向正在定义的类的指针?

c++ - 前向声明模板类时无效使用不完整类型

c++ - 自定义 MFC 窗口/对话框可以是类模板实例化吗?

ruby-on-rails - rails模型的继承

java - 我可以使用父类(super class)的类工厂静态方法创建子类实例吗?

c# - 泛型 where 受类字段限制