【发布时间】:2014-07-13 22:07:44
【问题描述】:
我对元编程完全陌生,但我遇到了一些问题。
我想编写一个具有不同内部表示的容器,如果传递的Container 具有Random Access Iterator,则使用不同的算法。但是,我不知道如何检查它。
更新:现在我正在尝试以下内容:
template <typename Container>
struct HaveRandomAccessIterator
{
typedef char yes[1];
typedef char no[2];
template <typename C>
static yes& test (typename std::random_access_iterator_tag*);
template <typename>
static no& test (...);
static const bool value = sizeof(test<std::iterator_traits<typename Container::iterator*>::iterator_category*>(0)) == sizeof(yes);
};
但是它给了我 std::list 的真正价值,我得到了编译错误,因为在那种情况下我使用 operator[]
谁能解释我如何正确检查它?
【问题讨论】:
标签: c++ templates iterator template-meta-programming