나는 융합 융합을 배우고 있고 std::vector<boost::fusion::vector<int,double,double> >
을보기 위해 노력 중이다. 코드는 간단하지만 const와 관련된 몇 가지 문제가있는 것으로 보입니다. 나는 const에 관한 어떤 점을 분명히 오해하고 누군가가 내가 잘못 가고있는 곳을 설명하는 것을 좋아할 것입니다.boost 융합과 const 정확함
코드 :
template<int N, class T>
struct viewTraits{
typedef typename T::value_type etype;
typedef typename boost::fusion::result_of::as_nview<etype, N>::type netype;
typedef std::vector<netype> result_type;
};
template <int N, typename T>
typename viewTraits<N,T>::result_type c(T const &t)
{
typename viewTraits<N, T>::result_type retVal;
for (typename T::const_iterator it(t.begin());it<t.end();++it){
retVal.push_back(fusion::as_nview<N>(*it));
}
return retVal;
}
template <typename Container>
typename Container::value_type sum(Container const &container)
{
typedef typename Container::value_type value_type;
return std::accumulate(container.begin(), container.end(), value_type());
}
int main(){
typedef fusion::vector<int, double, double> row;
typedef std::vector<row> container;
container x;
b(x, 200);
std::cout << sum(c<1>(x)) << std::endl;
}
코드 때문에 캐스팅 CONST에 문제의 retVal.push_back()
에서 컴파일에 실패. 일부 const 키워드를 제거하고 추가하는 여러 순열을 시도했지만 순열에 의한 프로그래밍에 성공하지 못했고 내가하고있는 것을 이해하고 싶습니다.
누구든지 어떤 생각이 있습니까? 기능 정의가 sum
이고 c
인 const
은 그대로 있어야합니다.
편집 : 수정 된 코드 : 나는 b
가 std::vector<fusion::vector<int, double, double> >
EDIT2입니다 x
채우는 것을 언급하는 것을 잊었다
template<int N, class T>
struct viewTraits{
typedef typename T::value_type etype;
typedef typename fusion::result_of::as_nview<etype, N>::type netype;
typedef typename fusion::result_of::at_c<netype,0>::type reference;
typedef typename boost::decay<reference>::type value_type;
typedef std::vector<value_type> result_type;
};
template <int N, typename T>
typename viewTraits<N,T>::result_type c(T const &t)
{
typename viewTraits<N,T>::result_type retVal;
for(typename T::const_iterator it(t.begin()); it<t.end();++it){
retVal.push_back(fusion::deref(fusion::begin(fusion::as_nview<N>(*it))));
}
return retVal;
}
'* (const T *) const'입니까? 'const_cast'를 사용하여 const를 버립니다. –