用普通类。例如:

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/

10-10 02:06