Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <typeinfo>
- class type_compare {
- private:
- bool _are_same = true;
- template<typename T, typename U>
- T _are_same_types(T first, U second) {
- if (!_are_same) {
- return first;
- }
- if (typeid(first) != typeid(second)) {
- _are_same = false;
- return first;
- }
- return first;
- }
- template<typename T, typename... Types>
- T _are_same_types(T value, Types... args) {
- if (!_are_same) {
- return value;
- }
- auto t = _are_same_types(args...);
- if (typeid(value) != typeid(t)) {
- _are_same = false;
- return value;
- }
- return value;
- }
- public:
- template<typename... Types>
- type_compare(Types... args) {
- _are_same_types(args...);
- }
- bool are_all_same() {
- return _are_same;
- }
- };
- int main(int argc, char* argv[]) {
- type_compare a(1, 2, 3, 4);
- type_compare b(1, "s", 3, 4);
- std::cout << a.are_all_same() << std::endl;
- std::cout << b.are_all_same() << std::endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement