如何将数据成员名称作为参数传递给另一个参数?

How do I pass a data member name as a parameter for use on another parameter?

给定这样的结构:

struct Foo{
    std::string name;
    int value;
};

我正在寻找一种方法来传递类型的实例化,
以及数据成员名称,
每个作为单独的参数。

尽管这是不正确的语法,但我认为它有助于说明我要完成的任务:

template<typename MemberName>
void Print(Foo foo, MemberName member_name){
    std::cout << foo.member_name << '\n';  
}

int main(){

    Foo foo{"name",100}; //create instance

    Print(foo,.name);  //prints name
    Print(foo,.value); //prints 100
}

这在 C++ 中如何实现?

另外,我没有权限修改类型的减速。

您可能正在寻找指向成员的指针:

#include <string>
#include <iostream>

struct Foo{
  std::string name;
  int value;
};

template<typename MemberType>
void Print(Foo foo, MemberType Foo::* member_name){
  std::cout << foo.*member_name << '\n';  
}

int main(){

  Foo foo{"name",100}; //create instance

  Print(foo, &Foo::name);  //prints name
  Print(foo, &Foo::value); //prints 100
}

编辑:当然,指向成员的指针在 C++ 中并不常见,在这种特定情况下,像 Steephen 建议的那样传递实际成员值更好(但也许您想在更复杂的情况下使用它们)