微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当可能的类型为浮点数或字符串时,如何将模板展开为字符串?

如何解决当可能的类型为浮点数或字符串时,如何将模板展开为字符串?

在 C++ 中,我想从模板构建一个仅字符串的容器。

例如:

<form id="login" method="POST" autocomplete="off">

我该如何实施?

解决方法

如果您可以使用 C++17,那么 constexpr if statement 就是您想要的。那会给你

df.loc[df.Team == 'India'].fillna('Joe Root',inplace = True)

如果你想使用C++11,你可以使用一个模板加上一个重载来处理调度

template<typename T> // the T can be map<string,string> or <string,float> or <string,int>
std::unordered_map<std::string,std::string> show(const T & t) {  
  std::unordered_map<std::string,std::string> r;
  for (const auto & i : t) {
     const auto & j = i.first;
     const auto & k = i.second;
     if constexpr(std::is_same_v<std::decay_t<decltype(k)>,std::string>)
       r.insert(std::make_pair(j,k));
     else
       r.insert(std::make_pair(j,std::to_string(k)));
  }
  return r;
}

这是可行的,因为当传递 template<typename T> std::unordered_map<std::string,std::string> show(const std::map<std::string,T> & t) { std::unordered_map<std::string,std::string> r; for (const auto & i : t) { const auto & j = i.first; const auto & k = i.second; r.insert(std::make_pair(j,std::to_string(k))); } return r; } std::unordered_map<std::string,std::string> & t) { std::unordered_map<std::string,k)); } return r; } 时,它与非函数模板完全匹配,并且优先于函数模板。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。