Tre*_*key 2 c++ templates function parameter-passing generic-programming
给出这样的结构:
struct Foo{
std::string name;
int value;
};
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种方法来传递类型的实例化,
以及数据成员名称,
每个都作为单独的参数.
虽然这是不正确的语法,但我认为它有助于说明我要完成的任务:
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
}
Run Code Online (Sandbox Code Playgroud)
如何在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
}
Run Code Online (Sandbox Code Playgroud)
编辑:当然,指向成员的指针在c ++中并不常见,在这种特定情况下,只需传递Steephen建议的实际成员值就更好了(但也许你想在更复杂的情况下使用它们)