C++ 有没有更好的方法来分配从同一个类继承的类中的多个成员?
我的代码如下:C++ 有没有更好的方法来分配从同一个类继承的类中的多个成员?,c++,C++,我的代码如下: class CRedisGroupChecker :public CRedisClientBase { SINGLETON(CRedisGroupChecker) public: ~CRedisGroupChecker(); private: template<typename MessageType> bool loadConfig(MessageType message) { if (!connectAndSelec
class CRedisGroupChecker :public CRedisClientBase
{
SINGLETON(CRedisGroupChecker)
public:
~CRedisGroupChecker();
private:
template<typename MessageType>
bool loadConfig(MessageType message) {
if (!connectAndSelect(DB_NO_ZONE_INFO_CONFIG)) {
return false;
}
auto type_name = message->GetTypeName();
auto reply_future = m_oClient.get(type_name);
m_oClient.commit();
auto reply = reply_future.get();
if (reply.is_string()) {
return utils::messageFromJsonString(message, reply.as_string());
}
return false;
}
template<typename...MessageType>
bool doLoad(MessageType&... args) {
bool dummy[sizeof...(MessageType)] = { loadConfig(&args)... };
for (auto iter = std::begin(dummy); iter != std::end(dummy); ++iter) {
if (!(*iter)) {
return false;
}
}
return true;
}
public:
bool load() {
return doLoad(level_zh, level_map_config, level_session_end_reward_config, level_score_star_config
, level_daily_reward_config, rank_reward_config, level_upgrade_config, level_winstreak_config);
}
public:
pb::paiwei::Level_ZH level_zh;
pb::paiwei::LevelMapConfig level_map_config;
pb::paiwei::LevelSessionEndRewardConfig level_session_end_reward_config;
pb::paiwei::LevelScoreStarConfig level_score_star_config;
pb::paiwei::LevelDailyRewardConfig level_daily_reward_config;
pb::paiwei::RankRewardConfig rank_reward_config;
pb::paiwei::LevelUpgradeConfig level_upgrade_config;
pb::paiwei::LevelWinstreakConfig level_winstreak_config;
};
class-CRedisGroupChecker:public-CRedisClientBase
{
SINGLETON(CRedisGroupChecker)
公众:
~CRedisGroupChecker();
私人:
模板
bool loadConfig(消息类型消息){
如果(!connectAndSelect(数据库\无\区域\信息\配置)){
返回false;
}
自动键入_name=message->GetTypeName();
自动回复\u future=m\u oClient.get(键入\u名称);
m_oClient.commit();
自动回复=reply_future.get();
if(reply.is_string()){
返回utils::messageFromJsonString(message,reply.as_string());
}
返回false;
}
模板
booldoload(MessageType&…args){
bool dummy[sizeof…(MessageType)]={loadConfig(&args)…};
对于(自动iter=std::begin(虚拟);iter!=std::end(虚拟);+iter){
如果(!(*iter)){
返回false;
}
}
返回true;
}
公众:
布尔负荷(){
返回加载(级别zh、级别map、级别会话、级别end、级别奖励、级别score、级别star)
每日奖励配置、等级奖励配置、等级升级配置、等级奖励配置);
}
公众:
pb::paiwei::Level_ZH Level_ZH;
pb::paiwei::LevelMapConfig level\u map\u config;
pb::paiwei::LevelSessionEndRefwardConfig级别\会话\结束\奖励\配置;
pb::paiwei::LevelScoreStarConfig level\u score\u star\u config;
pb::paiwei::LevelDailyRewardConfig级别\每日\奖励\配置;
pb::paiwei::RankRewardConfig排名\奖励\配置;
pb::paiwei::LevelUpgradeConfig level\u upgrade\u config;
pb::paiwei::LevelWinstreakConfig level\u winstreak\u config;
};
上面的代码是分配从类中的类消息继承的许多成员,我使用变量参数函数传递参数。在函数doLoad中,我使用了一个初始值设定项来扩展“args…”。“loadConfig(&arg)”是它的模式。我想知道是否有其他更好的方法来实现“load”函数所能达到的目标?对于C++17,您可以使用(虚拟
)数组技巧
template<typename...MessageType>
bool doLoad(MessageType&... args) { return (loadConfig(&args) && ...); }
谢谢,回答得很好!我想知道更多关于loadConfig附近的语句。使用括号和不使用括号有什么区别?当我不使用括号时,例如:{return loadConfig(&args)&&&&……},发生了一个编译错误。请您举例说明,或者给我一些我可以学习的参考资料?C++17添加并需要父级。
bool load() {
return std::apply([](auto&... args){ return (loadConfig(&args) && ...); }, configs);
}
public:
std::tuple<
pb::paiwei::Level_ZH,
pb::paiwei::LevelMapConfig,
pb::paiwei::LevelSessionEndRewardConfig,
pb::paiwei::LevelScoreStarConfig,
pb::paiwei::LevelDailyRewardConfig,
pb::paiwei::RankRewardConfig,
pb::paiwei::LevelUpgradeConfig,
pb::paiwei::LevelWinstreakConfig> configs;
};