【发布时间】:2018-06-22 13:21:19
【问题描述】:
我有一个大问题。我不会通过包装类选择存储服务。返回值必须是存储服务类中的对象。我粘贴了我目前的方法。但到目前为止我的心态并没有奏效。
错误:
错误:自动返回类型推导不一致:'SQL*' 然后'REDIS*' return new REDIS();
最大的愿望是有一个定义结构的接口类和一些包含目标存储服务所有必要操作的“驱动程序类”。
我希望你有另一种方法,我该如何解决这个问题..
#include <iostream>
class StorageTemplate {
public:
virtual bool UserhasSurName() = 0;
virtual bool UserhasGivenName() = 0;
};
class SQL: public StorageTemplate {
public:
bool UserhasSurName() {
//A SQL QUERY
return true;
}
bool UserhasGivenName() {
//AN ANOTHER SQL QUERY
return true;
}
};
class REDIS: public StorageTemplate {
public:
bool UserhasSurName() {
//A REDIS CALL
return false;
}
bool UserhasGivenName() {
//A REDIS CALL
return false;
}
};
class controller {
public:
auto test(int select) {
if( select == 1)
{
return new SQL();
} else {
return new REDIS();
}
}
};
int main(int argc, char const *argv[])
{
controller cont;
auto schnitzel = cont.test(1);
auto mitzel = cont.test(2);
std::cout << schnitzel->UserhasSurName() << std::endl;
std::cout << mitzel->UserhasSurName() << std::endl;
}
【问题讨论】:
-
1) “但我的心态到目前为止还没有奏效。” 这样的说法是没有用的。怎么样,没用? 2)请提供minimal reproducible example(
hallo是什么?)。 -
哦,对不起,这个功能已被弃用,我的意思是 UserhasSurName() -.-
-
标识符全部使用大写并不是一个好主意。
-
谢谢。但这不是问题...
-
auto不能从两个派生中推断出基类指针,明确地这样做,错误很明显