元组有点像结构.是否还有像工会一样的元组?或者我可以在元组中访问成员的工会,例如
my_union_tuple<int, char> u;
get<1>(u);
get<int>(u); // C++14 only, or see below
Run Code Online (Sandbox Code Playgroud)
对于第二行,请参见此处.
当然,解决方案不仅适用于特定的联合<int, char>,而且适用于任意类型和数量的类型.
有没有办法枚举C ++或C中的结构(struct |类)的成员?我需要获取成员名称,类型和值。之前,我在一个小型项目中使用了以下示例代码,该项目在全局范围内。我现在遇到的问题是,需要将一组值从GUI复制到对象,文件和VM环境。我可以创建另一个“穷人”的反射系统,或者希望有一个我还没有想到的更好的东西。有人有想法吗?
编辑:我知道C ++没有反射。
union variant_t {
unsigned int ui;
int i;
double d;
char* s;
};
struct pub_values_t {
const char* name;
union variant_t* addr;
char type; // 'I' is int; 'U' is unsigned int; 'D' is double; 'S' is string
};
#define pub_v(n,t) #n,(union variant_t*)&n,t
struct pub_values_t pub_values[] = {
pub_v(somemember, 'D'),
pub_v(somemember2, 'D'),
pub_v(somemember3, 'U'),
...
};
const int no_of_pub_vs = sizeof(pub_values) / sizeof(struct pub_values_t);
Run Code Online (Sandbox Code Playgroud) 有人建议在这里使用的元组,而不是所有的公共建筑.我发现它很有用.但我现在的问题是以下部分:
using Edge = std::tuple<Node_wp,//From Node
Node_wp>;//To Node
using Edge_wp = std::weak_ptr<Edge>;
using Node = std::tuple<std::vector<Edge_wp>,//Incoming Edges
std::vector<Edge_wp>>;//Outgoing Edges
using Node_wp = std::weak_ptr<Node>;
Run Code Online (Sandbox Code Playgroud)
如何克服模板参数中的循环依赖性.由于在不知道类型节点的情况下无法形成类型Edge,因此前向声明(拥有我所拥有的知识)将无法工作,反之亦然.
显然,我可以制作其中之一struct并完成它.但是,在访问中打破对称性将是丑陋的.