Skip to content

Instantly share code, notes, and snippets.

@chriswailes
Created June 22, 2016 21:01
Show Gist options
  • Save chriswailes/7eb51154539178c81c4b71fe0a01c4cd to your computer and use it in GitHub Desktop.
Save chriswailes/7eb51154539178c81c4b71fe0a01c4cd to your computer and use it in GitHub Desktop.
An example usage of the points-to-member access operator in C++
#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