【问题标题】:Create a stack for various types using Qt使用 Qt 为各种类型创建堆栈
【发布时间】:2016-06-05 19:30:12
【问题描述】:

我需要使用 Qt 模拟堆栈,作为可用于 int 和 string 的元素。我不需要你的代码,但我真的不知道该怎么做。如有任何提示,我将不胜感激。

【问题讨论】:

  • 有什么理由不能使用已经存在的 QStack 类?
  • @tofro "QStack 是 Qt 的通用容器类之一。它为相同类型的项目实现了堆栈数据结构。但我需要堆栈,它可能同时包含 int 和 string 元素。
  • 提供一个接口,让您可以在对象位于堆栈时对其进行任何操作,然后为intstring 实现它
  • 简单的答案是创建一个可以包含stringint 的包装器,但我称之为X-Y (What is the X-Y problem?)。你真的想用这个堆栈做什么?也许有人可以提出更好的建议。
  • 为什么要将整数和字符串放在同一个堆栈中?实际上这闻起来像 "xy problem"

标签: c++ string qt stack generic-programming


【解决方案1】:

您可以使用QStack<QVariant> 来获得您想要的结果。

#include <QtCore/QStack>
#include <QtCore/QVariant>

int main( int argc, char* argv[] )
{
   QStack<QVariant> stack;

   stack.push_back( 1 );
   stack.push_back( "two" );

   std::cout << stack.pop().toInt() << " " 
             << stack.pop().toString().toStdString() << std::endl; 
}

给了

1 two

【讨论】:

  • 如果目的是“以快速而肮脏的方式获得结果”,那可能是一个完美的解决方案。对于生产代码(我怀疑我们是否会这样做),我会认为 QVariant 太重量级了。一个更好的解决方案(特别是如果我们想要学习体验,我认为这里就是这种情况)恕我直言,它是一个模板类 StackableItem,它只有所需的 setter 和 getter。
猜你喜欢
  • 1970-01-01
  • 2011-07-12
  • 2018-10-01
  • 2015-07-02
  • 1970-01-01
  • 1970-01-01
  • 2022-11-29
  • 1970-01-01
  • 2016-09-28
相关资源
最近更新 更多