dan*_*ipi 2 c++ templates type-alias
我有以下结构:
template<typename T>
struct Foo
{
typename T::iterator iter;
};
Run Code Online (Sandbox Code Playgroud)
预期类型:
iter
是 astd::map<K, V>::iterator
时T
推导为std::map<K, V>
。
iter
是一个std::map<K, V>::const_iterator
何时T
推导为const std::map<K, V>
但我的代码总是得到一个std::map<K, V>::iterator
.
如何达到预期的实施效果?
您可以提供一个std::conditional
类型:
#include <type_traits> // std::conditional_t
template<typename T>
struct Foo {
using iter = std::conditional_t<std::is_const_v<T>
, typename T::const_iterator
, typename T::iterator>;
};
Run Code Online (Sandbox Code Playgroud)