我有代碼使用摺疊表達式來比較函數參數與類模板的整數參數。 代碼作品AFAIK,但我想知道是否有可能沒有_impl幫助函數做我想做的事情。這個擴展整數參數包的代碼可以用1個函數寫嗎?
的完整代碼(我的問題是,如果contains
可以不contains_impl
實施):
#include <algorithm>
#include <iostream>
#include <utility>
#include <cstdlib>
#include <tuple>
template <int H, int... T>
class if_set {
private:
template<typename... Ts>
bool contains_impl(const int& val, Ts... ts) const{
return (false || ... || (val == ts));
}
public:
bool contains(const int& val) const {
return contains_impl(val, H, T...);
}
};
using namespace std;
int main()
{
constexpr if_set<1,3,4,5> isi;
for (int i = -1; i < 10; ++i) {
cout << i << ": " << boolalpha << isi.contains(i) << endl;
}
if_set<'a','e','i','o','u', 'A', 'E', 'I', 'O', 'U'> vowels;
string word = "ARCADE FIRE: Modern man";
cout << word << endl;
word.erase(remove_if(word.begin(), word.end(), [&vowels](const char& c){return vowels.contains (c);}), word.end());
cout << word << endl;
}
注1:我知道這個代碼有很多問題,我不打算在生產中使用它,我勸阻的人從使用它直接或作爲靈感,這是一個玩具的例子,我想在閱讀有趣的article關於冷凍C++庫後實現。
注2:false ||
看起來很醜,但IDK有更好的方法。
爲什麼不'回報(VAL == 1H)|| (... || val == T);'? – Justin
因爲一些奇怪的錯誤:prog.cc:在成員函數'bool if_set :: contains(const int&)const': prog.cc:17:38:錯誤:fold表達式的操作數沒有未展開的參數包 return val == H)|| (... || val == T); –
NoSenseEtAl