所以有可能檢測迭代器是否是一個常量迭代器,但它比我最初想象的更復雜。
請記住,你並不需要你不斷迭代的實際情況,因爲所有你正在做的是類型檢查:
// Include <type_traits> somewhere
typedef MyContainer<MyType>::const_iterator it;
typedef std::iterator_traits<it>::pointer ptr;
typedef std::remove_pointer<ptr>::type iterator_type;
std::cout << std::boolalpha << std::is_const<iterator_type>::value;
// This'll print a 0 or 1 indicating if your iterator is const or not.
然後你就可以在GTEST通常的方式檢查搭配:
EXPECT_TRUE(std::is_const<iterator_type>::value);
免費諮詢:我認爲這是最好只寫一個測試,將無法編譯,如果它違背const正確性,讓你的編譯器檢查這個給你。
你可以用std::vector
測試:
typedef std::vector<int>::const_iterator c_it;
typedef std::iterator_traits<c_it>::pointer c_ptr;
typedef std::remove_pointer<c_ptr>::type c_iterator_type;
EXPECT_TRUE(std::is_const<c_iterator_type>::value);
typedef std::vector<int>::iterator it;
typedef std::iterator_traits<it>::pointer ptr;
typedef std::remove_pointer<ptr>::type iterator_type;
EXPECT_FALSE(std::is_const<iterator_type>::value);
這應該編譯和通過。
來源
2015-04-23 17:19:14
huu
你可以使用C++ 11嗎?您可能需要查看[type_traits](http://www.cplusplus.com/reference/type_traits/is_const/)。 – huu