保存元组_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::元组而增长。我希望元组的pushFront语义类似于std::vector等的push_back。
有什么建议吗?
PushFront::operator()
返回一个新元组,该元组后面跟有一个附加项,后面跟给定元组中的项。它不会附加到传入的。
由于N+1
元素的tuple
与N
元素的tuple
是不同的C++类型,因此不可能推入现有的类型。
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- valgrind-hellgrind与泄漏检查的结果不同
- 用C++20 fmt限制结果的总大小
- 如何返回一个类的两个对象相加的结果
- 使用QProcess执行命令,并将结果存储在QStringList中
- 如果我std::dynamic_pointer_cast并且底层dynamic_cast的结果为null,那么返回的sh
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 序列化,没有库的整数,得到奇怪的结果
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 在更改for循环的第三部分后,未使用for循环结果
- 使用++运算符会导致意外的结果
- 为什么在逗号分隔符上下文中将预增量的结果强制转换为void
- C++Brute Force攻击函数不会返回结果
- 你好。。。id_public变量不应该给出结果为 81 和 86 吗?为什么它为两个派生类占用不同的内存位置?
- 算术运算的结果类似于:C浮点变量中的1/3
- ";结果类型必须是可从输入范围的值类型""构造的;创建std::vector时
- 密码登录程序将永远循环并显示不正确的结果
- 如何让C++'tally up'结果并制定计划?
- 为什么这个程序的结果是3 "born"?和 4 死
- Web-CAT CxxTest Eclipse GUI 用于测试结果未显示