【发布时间】:2017-07-04 05:19:58
【问题描述】:
参考this Stackoverflow 问题,我无法弄清楚使用 c++ 风格的接口(即抽象类)实现 DI 的相同问题。我没有增加旧线程,而是创建了这个线程。编译器在最后一行抛出错误。
class IService {
virtual void DoWork() = 0;
virtual bool IsRunning() = 0;
};
class ClientA : IService {
void DoWork() {
std::cout << "Work in progress inside A";
}
bool IsRunning() {
return true;
}
};
class ClientB : IService {
void DoWork() {
std::cout << "Work in progress inside B";
}
bool IsRunning() {
return true;
}
};
class Server {
IService* _service;
Server(IService* service) : _service(service)
{ }
// Error: this declaration has no storage class or type specifier
// Compiler: MSVC 2017
_service->DoWork();
};
【问题讨论】:
-
在 C++ 中,
class是(组合)数据类型的定义(类似于struct)。它可能不直接包含语句。语句只能在函数中使用(包括成员函数)。 -
_service->DoWork();是类内部但任何函数外部的语句。无论你的类是否抽象,你都不能在 C++ 中做到这一点。 -
为了将来参考,我们在 Stack Overflow 上碰撞旧的 Q/A 没有问题。 OTOH,您的问题与其他问题不同,因此将其作为一个单独的问题提出是正确的
-
这与抽象类或依赖注入无关。
标签: c++