这是真实代码的片段,但想法是我想在日志中打印服务类型。 在此示例中,我尝试打印它,但出现异常,但我不知道为什么。 我还有其他使用编译时多态性的方法,它们工作得很好。
template <typename servicetype> class Service {
public:
std::string& service_type() { return static_cast<servicetype*>(this)->service_type_impl(); }
};
class ServiceType1 : public Service<ServiceType1> {
public:
ServiceType1() :service_type_("Service Type 1") {}
std::string& service_type_impl() { return service_type_; }
private:
std::string&& service_type_;
};
class ServiceType2 : public Service<ServiceType2> {
public:
ServiceType2() :service_type_("Service Type 2") {}
std::string& service_type_impl() { return service_type_; }
private:
std::string&& service_type_;
};
template <typename T>
class Server
{
public:
void print() {
std::cout << service_.service_type()<<std::endl;
}
Service<T> service_;
};
int main()
{
Server<ServiceType1> service_type1;
Server<ServiceType2> service_type2;
service_type1.print();
service_type2.print();
}
您永远不会构造实现类 ServiceType1 和 ServiceType2 的对象。
您仅构造 Server 和 Service 类对象。