【发布时间】:2018-06-14 05:32:54
【问题描述】:
上下文:我正在尝试记忆模板类的对象。目前,该类是一个深度嵌套的数据结构,其中充满了唯一指针,因此没有复制构造函数(据我所知,因此无法缓存)。但是,将来,如果复制构造函数可用,我想允许记忆。我尝试了以下代码:
// some function here... {
static std::unordered_map<State, Result> cache;
return [c, ToValue](State state) {
if (cache.find(state) != cache.end()) {
std::cout << "retrieving Literal from cache\n";
if (std::is_copy_constructible<Result>::value) {
return cache[state];
}
}
// calculate and return a Result
此代码无法编译,因为 Result 没有复制构造函数。有没有办法解决这个问题?谷歌非常无助。
【问题讨论】:
-
请发MCVE 显示无法编译的代码
-
你可以试试
if constexpr( std::is_copy_constructible...,但是如果那是假的,你也应该返回一些东西 -
如果
Result不是可复制构造的,你想返回什么? -
将
std::optional视为返回类型。这样你就可以返回一些东西,以防Result不可复制。 -
如果我没看错的话,这一切都与复制结构无关——请在下面查看我的答案。
标签: c++ copy-constructor memoization