【发布时间】:2018-04-06 09:03:34
【问题描述】:
我有 3 个这样的类(伪代码):
class Parent {
public:
virtual void * getData(size_t & size) = 0;
};
class A : public Parent {
public:
void * getData(size_t & size) {
size = sizeof(structA);
structA * a = new structA();
//fill er up
return (void *) a;
};
};
class B : public Parent {
public:
void * getData(size_t & size) {
size = sizeof(structB);
structB * b = new structB();
//fill er up
return (void *) b;
};
};
structA 和 structB 是我无法修改(由供应商提供)的 POD C 结构,因此我无法创建父级并返回多态 unique_ptr。
我的问题是:有没有办法让 A 类和 B 类在不使用原始指针的情况下返回它们的结构数据?
【问题讨论】:
-
您可以使用返回
std::variant的单个函数,还是需要能够动态地向系统添加更多类型? -
所有可能的结构在编译时都是已知的,所以我想
std::variant可以工作,我得研究一下。虽然交叉编译器 GCC 版本最多只支持 C++14,所以我可能不得不使用 boost 之类的。感谢您的建议! -
@juanchopanza 我的另一个想法是让
structA成为私人班级成员并返回演员void *给它。它仍然返回一个原始指针,但在这种情况下,您不必担心释放它(尽管权衡是您必须保证A在使用指针之前不会超出范围......)跨度> -
variant 自 c++11 以来一直存在。祝你好运。您可能不需要这个,但您可以将输出复制到 char 向量中;在您的情况下效率较低,但更灵活。
-
@Red.Wave 你有文档的链接吗?我只能找到 C++17 文档。