Created
June 22, 2016 21:01
-
-
Save chriswailes/7eb51154539178c81c4b71fe0a01c4cd to your computer and use it in GitHub Desktop.
An example usage of the points-to-member access operator in C++
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include <vector> | |
template <typename MemberType0, typename MemberType1> | |
struct S { | |
MemberType0 m0; | |
MemberType1 m1; | |
S(MemberType0 arg_m0, MemberType1 arg_m1) : m0(arg_m0), m1(arg_m1) {} | |
}; | |
template <typename ContainerType, typename MemberType> | |
MemberType sumOfMembers(ContainerType& struct_v, MemberType ContainerType::value_type::* member_name) { | |
MemberType result = MemberType(); | |
for (auto& s : struct_v) { | |
result += s.*member_name; | |
} | |
return result; | |
} | |
int main(int argc, char** argv) { | |
typedef S<int, double> SP; | |
std::vector< S<int, double> > struct_v; | |
struct_v.push_back( SP(1, 2.0) ); | |
struct_v.push_back( SP(3, 4.0) ); | |
struct_v.push_back( SP(5, 6.0) ); | |
std::cout << "Sum of m0: " << sumOfMembers(struct_v, &SP::m0) << std::endl; | |
std::cout << "Sum of m1: " << sumOfMembers(struct_v, &SP::m1) << std::endl; | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment