2012-02-29 10 views
4

我試圖使用boost::iterator_facade以及不完整的Value 模板參數。這失敗了,因爲iterator_facade正在嘗試 檢查類型是否爲is_pod具有不完整值參數的Boost.Iterator Facade

這是預期的行爲?我能以某種方式在 中解決這個限制嗎?我可以編寫一個簡單代理foo和 提供隱式轉換的類模板,但我寧願有一個更簡單的 解決方案。

#include <boost/iterator/iterator_facade.hpp> 

class iter 
    : public boost::iterator_facade< iter, 
            iter, 
            boost::forward_traversal_tag 
            > 
{ 
private: 
    friend class boost::iterator_core_access; 

    void increment() { } 

    bool equal(iter const& other) const { return true; } 

    iter& dereference() const { return const_cast<iter&>(static_cast<const iter&>(*this)); } 
}; 


int main() 
{ 
    iter f; 
    return 0; 
} 
+1

只是偶然發現了完全相同的問題。似乎促進開發者試圖變得太聰明,並忽略了上述情況,即使對於標準庫中的許多迭代器也是如此。 – ybungalobill 2012-03-05 18:22:45

+0

@ybungalobill我會添加一個賞金,但我懷疑這會有所幫助。 – pmr 2012-03-06 12:01:25

+0

[請注意,這是一個已知問題](https://svn.boost.org/trac/boost/ticket/1315)。另外我說的是錯的,有標準的迭代器從操作符*返回自己,但它們的value_type被定義爲'void'。 – ybungalobill 2012-03-06 12:05:04

回答

2

如果is_pod的問題,你不能只用iter類型專門化它?

關於ideone - http://ideone.com/1DR8v - 它似乎是以這種方式工作,即使輸入中沒有定義,is_pod也是專用於該不完整類型。

+0

由於奇怪的原因,我必須專注於'is_POD'而不是'is_pod',但這使我走向了正確的方向。 http://codepad.org/GwZu7PJa – pmr 2012-03-12 14:52:29