Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 有没有更好的方法来分配从同一个类继承的类中的多个成员?_C++ - Fatal编程技术网

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;
};