我想制作一个多线程模型,其中服务器主循环不会被挂起的数据库事务停止。所以我做了几个简单的类,这是一个非常简化的版本:
enum Type
{
QueryType_FindUser = 1 << 0,
QueryType_RegisterUser = 1 << 1,
QueryType_UpdateUser = 1 << 2,
//lots lots and lots of more types
};
class Base
{
public:
Type type;
};
class User: public Base
{
public:
std::string username;
User(std::string username)
:username(username)
{type = QueryType_FindUser;}
};
现在,当我将数据传输为 时Base
,我想再次将其转换回User
类:
concurrency::concurrent_queue<QueryInformation::Base> BackgroundQueryQueue;
void BackgroundQueryWorker::Worker()
{
while(ServerRunning)
{
QueryInformation::Base Temp;
if(BackgroundQueryQueue.try_pop(Temp))
{
switch(Temp.type)
{
case QueryInformation::Type::QueryType_FindUser:
{
QueryInformation::User ToFind(static_cast<QueryInformation::User>(Temp));//error here
//do sql query with user information
break;
}
//etc
}
}
boost::this_thread::sleep(boost::posix_time::milliseconds(SleepTime));
}
}
我在哪里标记了//errorhere
它说没有用户定义的从Base
to转换的行User
,我该怎么办?如何定义这种转换?
我是多态性的新手,所以额外解释一下为什么它不能编译也很好:) 根据我对多态性的理解,应该可以在 base<->derived..