我需要从库中获取一些复杂的数据,然后在上层使用这些数据。数据由两部分组成:在评估数据 A 时,我得到了一些额外的数据 B,并且数据 B 应该“按原样”返回到库中,以便不再重新评估它。
所以为了简化这一点:我从库中获取数据 A 和数据 B,将两者都传输到上层,使用 A,但是我应该将数据 B 传输回库。
问题是(除了这个奇怪的架构)我不希望我的上层知道关于数据 B 的任何信息,那么我应该使用什么机制来避免在上层代码中定义特定于库的数据类型?数据应作为指针传递。
我正在考虑 void*,但 C++17 允许使用我不太了解的 std::any。我可以用std::unique_ptr<std::any>
吗?还是只是std::any
取而代之?
应该是这样吗?
std::any GetDataAandB()
{
std::unique_ptr ret = std::make_unique<LibraryType>(1, "");
return std::make_any<std::unique_ptr<LibraryType>>( ret);
}