C++ 基类中基类子类型的成员变量

C++ 基类中基类子类型的成员变量,c++,c++11,C++,C++11,是否有一种方法可以使用模板执行以下操作?以下代码抛出未知类型的编译时错误 我试图创建两种不同类型的应用程序,一种是从应用程序继承的,另一种是从服务继承的,从应用程序继承的。所有应用程序都有一个名为Cron的服务,该服务将从服务继承。应用程序将被线程化和分离,而从应用程序派生的服务将被线程化和连接。我把它分解成最简单的术语 #include <iostream> class Application { public: Service service; //Throws unknown

是否有一种方法可以使用模板执行以下操作?以下代码抛出未知类型的编译时错误


我试图创建两种不同类型的应用程序,一种是从应用程序继承的,另一种是从服务继承的,从应用程序继承的。所有应用程序都有一个名为Cron的服务,该服务将从服务继承。应用程序将被线程化和分离,而从应用程序派生的服务将被线程化和连接。我把它分解成最简单的术语

#include <iostream>

class Application
{
public:
Service service; //Throws unknown type... Forward decl. will not work either.

};


class Service:public Application
{


};

int main(int argc, const char * argv[])
{

// insert code here...
std::cout << "Hello, World!\n";
return 0;
}
#包括
班级申请
{
公众:
服务;//抛出未知类型…Forward decl.也将不起作用。
};
班级服务:公开申请
{
};
int main(int argc,const char*argv[]
{
//在这里插入代码。。。

不,没有办法做你想做的,因为你想做的是胡说八道。等等,我会解释的

服务
源自
应用程序
,但
应用程序
具有类型为
服务
的成员

这是一个循环依赖性,但除此之外,我只是不明白。因为
服务
是从
应用程序
派生出来的,它有一个
服务
类型的成员,它是从
应用程序
派生出来的,它有一个
服务
类型的成员……你明白了。这就像站在一个mi面前一样带着一面镜子,努力寻找结局

现在的问题是,你到底想做什么

你在评论中说:


我正在尝试创建两种不同类型的应用程序 从应用程序继承,以及从服务继承的 从应用程序继承。所有应用程序都有一个名为 Cron,它将从服务继承

这里还有一点模棱两可。应用程序如何从应用程序派生

我猜想您想要的是实现
服务
的类的两个不同的具体实例化。一个只实现
服务
,另一个也实现其他东西

在这种情况下:

class Service
{
public:
  void Cron();
};

class Application
{
public:
  void OtherStuff();
};
但你也说过:

应用程序将被线程化和分离,而派生 从应用程序将螺纹和连接

这听起来像是一个年轻人的工作

class-DetatchedPolicy
{
公众:
void StartThread();//此函数将启动线程并解除跟踪
};
类联合策略
{
公众:
void StartThread();//此函数将启动线程并加入
};
模板
类基本服务
:
公共线程策略
{
公众:
服务()
{
StartThread();
}
void Cron();
};
typedef基本服务服务;
typedef基本服务应用程序;

不,没有办法做你想做的事,因为你想做的是胡说八道。等等,我会解释的

服务
源自
应用程序
,但
应用程序
具有类型为
服务
的成员

这是一个循环依赖性,但除此之外,我只是不明白。因为
服务
是从
应用程序
派生出来的,它有一个
服务
类型的成员,它是从
应用程序
派生出来的,它有一个
服务
类型的成员……你明白了。这就像站在一个mi面前一样带着一面镜子,努力寻找结局

现在的问题是,你到底想做什么

你在评论中说:


我正在尝试创建两种不同类型的应用程序 从应用程序继承,以及从服务继承的 从应用程序继承。所有应用程序都有一个名为 Cron,它将从服务继承

这里还有一点模棱两可。应用程序如何从应用程序派生

我猜想您想要的是实现
服务
的类的两个不同的具体实例化。一个只实现
服务
,另一个也实现其他东西

在这种情况下:

class Service
{
public:
  void Cron();
};

class Application
{
public:
  void OtherStuff();
};
但你也说过:

应用程序将被线程化和分离,而派生 从应用程序将螺纹和连接

这听起来像是一个年轻人的工作

class-DetatchedPolicy
{
公众:
void StartThread();//此函数将启动线程并解除跟踪
};
类联合策略
{
公众:
void StartThread();//此函数将启动线程并加入
};
模板
类基本服务
:
公共线程策略
{
公众:
服务()
{
StartThread();
}
void Cron();
};
typedef基本服务服务;
typedef基本服务应用程序;

我想你真正想做的是使用指针

class Service;
class Application 
{

     std::shared_ptr<Service> m_service;
};

class Service : public Application
{
};
类服务;
班级申请
{
std::共享ptr m_服务;
};
班级服务:公开申请
{
};

我想你真正想做的是使用指针

class Service;
class Application 
{

     std::shared_ptr<Service> m_service;
};

class Service : public Application
{
};
类服务;
班级申请
{
std::共享ptr m_服务;
};
班级服务:公开申请
{
};

在我看来,将接口与实现分离可能会让您受益匪浅:

struct ApplicationInterface
{
    virtual ~ApplicationInterface() {}

    virtual void do_application_stuff_1() = 0;
    virtual void do_application_stuff_2() = 0;
};

struct ServiceInterface
: public ApplicationInterface
{
    virtual ~ServiceInterface() {}

    virtual void do_service_stuff_1() = 0;
    virtual void do_service_stuff_2() = 0;
};

class CronService
: ServiceInterface
{
public:
    // ApplicationInterface
    virtual void do_application_stuff_1() {}
    virtual void do_application_stuff_2() {}

    // ServiceInterface
    virtual void do_service_stuff_1() {}
    virtual void do_service_stuff_2() {}
};

class Application
: ApplicationInterface
{
protected:
    CronService cron;

public:

    virtual void do_application_stuff_1() {}
    virtual void do_application_stuff_2() {}
};

在我看来,将接口与实现分离可能会让您受益匪浅:

struct ApplicationInterface
{
    virtual ~ApplicationInterface() {}

    virtual void do_application_stuff_1() = 0;
    virtual void do_application_stuff_2() = 0;
};

struct ServiceInterface
: public ApplicationInterface
{
    virtual ~ServiceInterface() {}

    virtual void do_service_stuff_1() = 0;
    virtual void do_service_stuff_2() = 0;
};

class CronService
: ServiceInterface
{
public:
    // ApplicationInterface
    virtual void do_application_stuff_1() {}
    virtual void do_application_stuff_2() {}

    // ServiceInterface
    virtual void do_service_stuff_1() {}
    virtual void do_service_stuff_2() {}
};

class Application
: ApplicationInterface
{
protected:
    CronService cron;

public:

    virtual void do_application_stuff_1() {}
    virtual void do_application_stuff_2() {}
};

服务
应用程序
继承而来,它有一个
服务
类型的成员时,这就不再有意义了。我们真正想做的是什么,为什么?如果
应用程序
包含一个
服务
,它是
应用程序
的一部分Ination
…您在哪里停下来?一个
应用程序
对象有多大?我正在尝试创建两种不同类型的应用程序,一种是从应用程序继承的应用程序,另一种是从服务继承的应用程序。所有应用程序都有一个名为Cron的服务,它将从服务继承。