我在源文件中包含了<utility>
。然后我使用了std::exchange
,但编译器说它没有在命名空间std中找到exchange
。我查看了usr/include/utility
,通过搜索exchange
我找到了实现,它位于namespace std
块内。我必须从std::
中删除std::exchange
以使代码编译。
我能解决这个问题吗?
如何以其他方式使我的代码可移植?
注意:我在Android上使用来自Termux linux模拟器的clang。我用apt
安装了它。
答案 0 :(得分:2)
std::exchange
是在C ++ 14中引入的。如果使用C ++ 11,则标准不提供它。
解决方案:使用符合C ++ 14的实现(可能需要明确启用支持,具体取决于它是否为默认值)。
如何以其他方式使我的代码可移植?
您可以自己实施。以下是cppreference的可能实施方案。
template<class T, class U = T> T exchange(T& obj, U&& new_value) { T old_value = std::move(obj); obj = std::forward<U>(new_value); return old_value; }