我最近嘗試boost :: mpl,它看起來既可怕又可怕。有時編譯錯誤信息相當混亂。boost編譯錯誤:: mpl ::標記<T> :: type
這一次,我在下面的代碼獲得的問題:
#include <iostream>
#include <boost/type_traits/is_same.hpp>
#include <boost/mpl/integral_c_tag.hpp>
#include <boost/mpl/tag.hpp>
#include <typeinfo>
#include <boost/mpl/for_each.hpp>
#include <boost/mpl/range_c.hpp>
#include <boost/mpl/vector.hpp>
#include <boost/mpl/copy.hpp>
//使用元函數標籤<>收購類型,以便MPL只會輸出整數。
struct mpl_func2
{
template<typename T>
void operator()(T t)
{
if(boost::is_same<boost::mpl::tag<T>::type, boost::mpl::integral_c_tag>::value)
{cout<<t<<',';}
}
};
以下是錯誤消息:
錯誤:在參數1模板參數列表中 '模板結構的boost :: is_same'
錯誤類型/值不匹配:預期型,得到了 '的boost :: MPL ::標籤::型'
當然,最好不要比if(false)... –
實際上,有時運行時的'if(某個constexr)'比純元編程更合適。 –