用普通类。例如:
class A {
public:
int a;
std::string b;
A() {}
~A() {}
}
我们可以做的:
A x;
x.a = 1;
x.b = "hello";
但是现在我不想做上面的事情。我想访问对象的第n_index个属性。例如伪像
x.get<2>()
(或x.set<2>(...)
)像x.b
。那怎么办有任何模板。
另外,如果我想要这样的代码
int number = 2;
x.get<number>()
constexpr
有问题吗? 最佳答案
我认为最接近的方法是使用boost::fusion。
一个例子是
#include <boost/fusion/adapted.hpp>
#include <boost/fusion/sequence.hpp>
#include <boost/mpl/int.hpp>
#include <iostream>
class A {
public:
int a;
std::string b;
A() {}
~A() {}
};
BOOST_FUSION_ADAPT_STRUCT(A,
(int, a)
(std::string, b)
)
using namespace boost::fusion;
int main()
{
A x;
x.a = 1;
x.b = "hello";
std::cout << at<boost::mpl::int_<0>>(x) << '\n';
std::cout << at<boost::mpl::int_<1>>(x) << '\n';
at<boost::mpl::int_<0>>(x) = 5;
at<boost::mpl::int_<1>>(x) = std::string("World");
std::cout << at<boost::mpl::int_<0>>(x) << '\n';
std::cout << at<boost::mpl::int_<1>>(x) << '\n';
}
关于c++ - 如何在C++中获得类的第n个属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42630397/