问题描述
在 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;
}
时,它与非函数模板完全匹配,并且优先于函数模板。