c++ - 如何在模板类函数中分配结构值?
问题描述
我有一堆结构需要添加到我的向量中并给它们一些默认值。
- 结构是外部的,我无法更改它们。
- 在分配这些值时,为了方便起见,我需要查看结构成员名称。
- 为了方便起见,我需要将所有默认值直观地放在同一个地方。
- 编译器目前优化了 myClass::addStruct() 中未使用的 if 分支——这正是我想要的。
问:可以以更好/更简单的方式完成吗?
编辑我没有 C++17
// 外部结构
typedef struct A {
int member1;
float member2;
char *member3;
// ...
} A;
typedef struct B {
double member5;
float member3;
int *member4;
// ...
} B;
typedef struct C {
char* member5;
char* member2;
float *member3;
// ...
} C;
...
template <class T>
void myClass::addStruct(std::vector<T> &vp)
{
void *sp = nullptr;
if(std::is_same<T, A>::value) {
A s{};
s.member1 = 2;
s.member3 = "whatever";
sp = &s;
}
else if(std::is_same<T, B>::value) {
B s{};
s.member4 = nullptr;
s.member3 = 3.1f;
sp = &s;
}
else if(std::is_same<T, C>::value) {
C s{};
s.member2 = "whenever";
sp = &s;
}
/* else if() {
}
else if() {
} ...
*/
if(sp == nullptr) {
// print error
return;
}
vp.push_back(*(reinterpret_cast<T*>(sp)));
}
// usage
addStruct<A>(...);
addStruct<A>(...);
addStruct<B>(...);
addStruct<C>(...);
解决方案
推荐阅读
- linux - 如何为使用 ARCH_MULTIPLATFORM=y 的 ARM 平台指定物理内存偏移量?
- php - 如果我希望我的 Laravel 项目有多个单词,我应该如何命名它?
- python - 在 ListView 中注释 QuerySet:Django
- angular - Angular 6/7:仅从 API 获取数据一次,但显示在两个路由/视图中
- c++ - 使用 << 运算符从文件中读取无符号字符
- java - 未调用自定义 Spring UserDetailsService
- algorithm - 使用 d3 voronoi 查找最近邻居的运行时间
- python - 熊猫 read_json to_json 方法
- mysql - 在循环中使用 mysql 准备好的语句在执行第一个循环/循环后中断循环
- javascript - 界面不更新,直到事件