相关疑难解决方法(0)

如何将反射添加到C++应用程序?

我希望能够内省一个C++类的名称,内容(即成员及其类型)等.我在这里说的是原生C++,而不是托管C++,它有反射.我意识到C++使用RTTI提供一些有限的信息.哪些额外的库(或其他技术)可以提供此信息?

c++ reflection templates sfinae

242
推荐指数
19
解决办法
19万
查看次数

索引结构是否合法?

无论代码有多糟糕,并且假设对齐等在编译器/平台上不是问题,这种未定义或破坏的行为是什么?

如果我有这样的结构: -

struct data
{
    int a, b, c;
};

struct data thing;
Run Code Online (Sandbox Code Playgroud)

它是合法的访问a,bc作为(&thing.a)[0],(&thing.a)[1](&thing.a)[2]

在每种情况下,在我尝试过的每个编译器和平台上,我尝试过的每个设置都"有效".我只是担心编译器可能没有意识到bthing [1]是相同的东西,并且'b'的存储可能被放入寄存器中,而东西[1]从内存中读取错误的值(例如).在每种情况下,我都尝试过它做了正确的事情.(我当然意识到这一点并不多见)

这不是我的代码; 它是我必须使用的代码,我对这是代码还是破坏代码感兴趣,因为不同影响我更改它的优先级:)

标记C和C++.我最感兴趣的是C++,但如果它不同,我也会感兴趣.

c c++ struct

103
推荐指数
8
解决办法
1万
查看次数

带有数组的BOOST_PP_REPEAT

我有这样的结构:

struct E1
{
    typedef boost::tuple<  
     boost::optional< N::type_A >, // N - namespace
     boost::optional< N::type_B >,
     ...................
     boost::optional< N::type_X > //arbitrary number of, maximal is 7
     > data_type;


   // for access by name 
   boost::optional<N::type_A> const&  type_A() const { return boost::get<0>(data); }
   boost::optional<N::type_B> const&  type_B() const { return boost::get<1>(data); }
   .....................................
   boost::optional<N::type_X> const&  type_X() const { return boost::get<2>(data); }

   data_type data;
};
Run Code Online (Sandbox Code Playgroud)

问:我如何使用BOOST预处理器创建这个结构?对我来说只知道type_A,type_B,...,type_X类型的名称.

这需要我,因为我必须创建很多这样的结构,只改变type_A,type_B,...类型.

在通常情况下,我可以使用boost预处理器数组还是设置?

c++ boost boost-preprocessor

4
推荐指数
1
解决办法
497
查看次数

如何使用宏来收集变量名?

我想简化以下内容

class A {
    int a;
    int b;
    int c;
    std::vector<int*> addrs;
public:
    A() : addrs{ &a, &b, &c } {}
};
Run Code Online (Sandbox Code Playgroud)

所以我没有在两个地方写入字段列表,即声明和初始化器addrs.有没有办法使用宏来收集声明并在以后使用它们.例如,

class A {
    VAR_DECL(a);
    VAR_DECL(b);
    VAR_DECL(c);
    std::vector<int*> addrs;
public:
    A() : addrs{ VAR_ADDRESSES } {}
};
Run Code Online (Sandbox Code Playgroud)

对于上下文,这是为了实现某种属性内省系统.

c++ macros c++11

1
推荐指数
1
解决办法
309
查看次数

标签 统计

c++ ×4

boost ×1

boost-preprocessor ×1

c ×1

c++11 ×1

macros ×1

reflection ×1

sfinae ×1

struct ×1

templates ×1