#include <iostream>
#include <iterator>
#include <string>
#include <vector>
struct PasswordVerifier {
bool operator()(const std::string &password) {
std::cout << "password: " << password << std::endl;
return false;
}
};
struct IdCardVerifier {
bool operator()(const std::vector<int> &id_value) {
std::cout << "id_value: ";
std::copy(id_value.begin(), id_value.end(), std::ostream_iterator<int>(std::cout, ","));
return false;
}
};
template<class Verifier, class... Args>
bool verify(Args&&... args) {
return Verifier()(std::forward<Args>(args)...);
}
int main() {
verify<PasswordVerifier>("this_is_my_password");
verify<IdCardVerifier>(std::vector<int>({0, 1, 2, 3}));
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aXRlcmF0b3I+CiNpbmNsdWRlIDxzdHJpbmc+CiNpbmNsdWRlIDx2ZWN0b3I+CgpzdHJ1Y3QgUGFzc3dvcmRWZXJpZmllciB7Cglib29sIG9wZXJhdG9yKCkoY29uc3Qgc3RkOjpzdHJpbmcgJnBhc3N3b3JkKSB7CgkJc3RkOjpjb3V0IDw8ICJwYXNzd29yZDogIiA8PCBwYXNzd29yZCA8PCBzdGQ6OmVuZGw7CgkJcmV0dXJuIGZhbHNlOwoJfQp9OwoKc3RydWN0IElkQ2FyZFZlcmlmaWVyIHsKCWJvb2wgb3BlcmF0b3IoKShjb25zdCBzdGQ6OnZlY3RvcjxpbnQ+ICZpZF92YWx1ZSkgewoJCXN0ZDo6Y291dCA8PCAiaWRfdmFsdWU6ICI7CgkJc3RkOjpjb3B5KGlkX3ZhbHVlLmJlZ2luKCksIGlkX3ZhbHVlLmVuZCgpLCBzdGQ6Om9zdHJlYW1faXRlcmF0b3I8aW50PihzdGQ6OmNvdXQsICIsIikpOwoJCXJldHVybiBmYWxzZTsKCX0KfTsKCnRlbXBsYXRlPGNsYXNzIFZlcmlmaWVyLCBjbGFzcy4uLiBBcmdzPgpib29sIHZlcmlmeShBcmdzJiYuLi4gYXJncykgewoJcmV0dXJuIFZlcmlmaWVyKCkoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKfQoKaW50IG1haW4oKSB7Cgl2ZXJpZnk8UGFzc3dvcmRWZXJpZmllcj4oInRoaXNfaXNfbXlfcGFzc3dvcmQiKTsKCXZlcmlmeTxJZENhcmRWZXJpZmllcj4oc3RkOjp2ZWN0b3I8aW50Pih7MCwgMSwgMiwgM30pKTsKCXJldHVybiAwOwp9Cg==