繁体   English   中英

保存tuple_cat的结果

[英]Saving the results of a tuple_cat

我有从其他来源获取的代码。 其余代码效果很好。 我试图使用以下代码追加到元组:

// Because std::make_tuple can't be passed
// to higher order functions.
constexpr struct MakeTuple
{
    template< class ...X >
    constexpr std::tuple<X...> operator () ( X ...x ) {
        return std::tuple<X...>( std::move(x)... );
    }
} tuple{};

constexpr struct PushFront
{
    template< class ...X, class Y >
    constexpr auto operator () ( std::tuple<X...> t, Y y )
        -> std::tuple< Y, X... >
    {
        return std::tuple_cat( tuple(std::move(y)), std::move(t) );
    }
} pushFront{};

template <template <typename...> class T, typename... Args, typename... Obs>
T<Obs...> MakeSubject(std::tuple<Obs ...> &&obs, Args&& ... args)
{
    return T<Obs...>(std::move(obs), args...);
}

template <template <typename...> class T, typename... Args, typename... Obs>
std::tuple<T<Obs...>> Store(std::tuple<Obs ...> &&obs, Args&& ... args)
{
    return std::make_tuple(T<Obs...>(std::move(obs), args...));
}

template <typename Base> class Observer
{
}

class Printer : public Observer<Printer>
{
}

template <typename T, typename... Obs> class Subject
{
private:
    std::tuple<Obs &...> observers;
}

template <typename... Obs>
class Pressure : public Subject<Pressure<Obs...>, Obs...> 
{
}

std::ostream& operator << (std::ostream& out, const Printer& ac)
{
    //stuff

    return out;
}

我有这样的循环外的代码:

const Printer sentinel; 
auto store = Store<Pressure>(std::move(std::tuple<Printer>(sentinel)), fakePressure); // The first one is just a delimiter

问题是在循环中,当我尝试通过添加以下内容来存储元组时:

while(true) // A Demo loop
{
    auto subject = MakeSubject<Pressure>(std::move(obs), q);
    pushFront(store, subject.Observers()));
    std::cout << store; // Always empty
    std::cout << pushFront(store, subject.Observers()); // This works and shows whatever I passed in, but the list of tuples doesn't grow from previous appends.
}

通过添加越来越多的std :: tuples, store不会增长 我期望用于元组的pushFront的语义类似于用于std :: vector等的push_back的语义。

有什么建议么?

PushFront::operator()返回新的元组,其中包含附加项,后跟给定元组中的项。 它不会追加到传入的内容中。

这是不可能推到现有的一个,因为一个tupleN+1的元件是一个不同的C ++型比tupleN元件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM