大家好我想做这样的事情:
template<typename T>
struct APP_Interface{
APP_Interface* shared;
Mutex m;
T data;
virtual void publish(){
//copy data from this->data to shared->data
}
virtual void receive(){
//copy data from shared->data to this->data
}
};
struct MyInterface : APP_Interface<MyInterface>{
float MyData1;
float MyData2;
};
我(我猜不是很惊讶)进入:
error: 'APP_Interface<T>::data' has incomplete type
error: forward declaration of 'struct MyInterface '
有什么方法吗?
编辑:我想要实现的目标
我有两个主题。 Thread1生成实时数据,Thread2使用这些数据。现在我想让Thread1通过共享数据和互斥锁与Thread2共享数据。
实际上有很多线程,而且很多不同的数据接口共享不同的数据。因此,我想要一种简单而优雅的方式来创建和使用这些接口。
我想创建一个类似这样的界面:
struct MyInterface : ??? {
float MyData1;
float MyData2;
};
然后,当我应该使用它时,我只想:
//Thread1.hpp
class thread1{
void run(){
interface.MyData1 = 100;
interface.publish();
}
public:
MyInterface interface;
}
//And something similar for thread2 at the receiving end
最后,我想要实现一些依赖注入&#34;通过让main.c创建两者之间的链接并分配共享结构。例如:
//main.cpp
void main(){
//Bind interfaces:
MyInterface interface({ &thread1.interface, //PROVIDER
&thread2.interface, //CONSUMER
});
}
我不知道这个解释是否有意义:)
答案 0 :(得分:0)
data
为指针。这是更新的课程。
template<typename T>
struct APP_Interface{
APP_Interface* shared;
Mutex m;
T* data;
APP_Interface : data(nullptr) {}
T const& getData() const
{
if (!data)
{
data = new T;
}
return *data;
}
void setData(T const& newData)
{
if (!data)
{
data = new T;
}
*data = newData;
}
virtual void publish(){
//copy data from this->data to shared->data
}
virtual void receive(){
//copy data from shared->data to this->data
}
};