我已经定义:
result = seasonal_decompose(self.series, model='additive',freq=frequency)
residual = result.resid
对于类elem,我具有函数head(),tail()和其他函数,但是它们创建副本,它们返回元组的头部或元组的尾部的副本,但是我需要引用此-> dm。
因为头脑很容易,template<class Head,class ...Tail>
struct elem{
std::tuple<Head,Tail...> dm;
};
给我参考。
尾巴有可能吗?尾巴,是指第一个元素之后的所有元素。
答案 0 :(得分:2)
只有当tuple<A, B, C>
在内部存储为等同于cons单元格的东西时,这样的事情才可能发生:
struct __tuple_A_B_C {
A car;
tuple<B, C> cdr;
A& head() { return car; }
tuple<B, C>& tail() { return cdr; }
};
但是事实并非如此-您所知道的是您拥有A
,B
和C
类型的子对象。它们的布局是完全不确定的-并且您绝对不知道实现是否使用这种递归来实现tuple
。他们被允许,但是我不确定有什么办法。
最好的办法是给定tuple<A, B, C>
返回tuple<B&, C&>
。在C ++ 17中,实现起来并不难:
template<class Head,class ...Tail>
struct elem{
std::tuple<Head,Tail...> dm;
auto tail() {
return std::apply([](auto&, auto&... rest){
return std::tie(rest...);
}, dm);
}
};
但是,如果您确实想要这种类似于cons-cell的递归方法,则最好实际实现自己的递归,这样您就可以获得所需的行为:
template <class Head, class... Tail>
struct elem {
Head head;
elem<Tail...> tail;
};
template <class Head>
struct elem<Head> {
Head head;
};
取决于您的实际工作。