小编Moi*_*oia的帖子

宇宙飞船操作员的真实世界使用示例

spaceship operator 的定义旨在对排序进行强定义,但这是否会影响您的客户端代码的编写方式,或者只是如何定义您的类比较运算符?

由于在其他帖子中缺少真实世界的例子,我没有完全理解这部分。

关于宇宙飞船运营商的其他 SO 帖子:

c++ spaceship-operator c++20

6
推荐指数
2
解决办法
1825
查看次数

C++20 字符串文字模板参数工作示例

有人可以将 C++20 的功能字符串模板的最小可重现示例作为模板参数发布吗?

这个来自ModernCpp 的不编译:

template<std::basic_fixed_string T>
class Foo {
    static constexpr char const* Name = T;
public:
    void hello() const;
};

int main() {
    Foo<"Hello!"> foo;
    foo.hello();
}
Run Code Online (Sandbox Code Playgroud)

我已经设法根据这篇 Reddit 帖子编写了一个有效的解决方案:

#include <iostream>

template<unsigned N>
struct FixedString 
{
    char buf[N + 1]{};
    constexpr FixedString(char const* s) 
    {
        for (unsigned i = 0; i != N; ++i) buf[i] = s[i];
    }
    constexpr operator char const*() const { return buf; }

    // not mandatory anymore
    auto operator<=>(const …
Run Code Online (Sandbox Code Playgroud)

c++ templates c++20

6
推荐指数
1
解决办法
591
查看次数

如何在Qt的QTableView中显示简单的QMap?

QMap有个叫map.我map用我的数据库中的几行数据初始化它.现在我将它发送map到另一个包含GUI类的类.在我的GUI中,我有一个TableView项.我需要map在这个TableView中以任何顺序显示它.

我已经看过几个例子,但它们都是一个只有一个字段的矢量.他们使用另一个类来形成视图.我想知道是否有人之前已经这样做过,可以帮助我.

c++ mysql user-interface qt qtableview

5
推荐指数
1
解决办法
3753
查看次数

为 Qt WebAssembly 编译虚拟键盘

QtCreator我正在尝试从中编译虚拟键盘项目示例WebAssembly

要编译 wasm 库,必须静态链接。根据文档

静态构建

虚拟键盘可以针对应用程序进行静态构建和链接。这意味着 Qt 也是静态构建的(使用配置命令行中的 -static 选项)。

通过将 CONFIG+=static 添加到 qmake 命令行然后重建来启用虚拟键盘的静态构建。

虚拟键盘使用的一些第三方模块始终构建为共享库。这些模块是 Hunspell 和 Lipi Toolkit。

这么说,我正在尝试编译

mkdir buildwasm && cd buildwasm
/opt/Qt/5.15.2/wasm_32/bin/qmake .. CONFIG+=static CONFIG+=disable-hunspell && make -j8
Run Code Online (Sandbox Code Playgroud)

但不知何故键盘不是静态链接的,我收到此错误

wasm-ld: error: initial memory too small, 18699856 bytes needed
shared:ERROR: ...
Run Code Online (Sandbox Code Playgroud)

我错过了什么还是这是一个错误?

c++ qt virtual-keyboard qml webassembly

5
推荐指数
1
解决办法
393
查看次数

Gitlab 合并请求默认名称

当从问题创建合并请求时,会生成以下标题:

Draft: Resolve "issue"
Run Code Online (Sandbox Code Playgroud)

如何修改默认行为?理想情况下对我来说应该没问题

Draft: Issue
Run Code Online (Sandbox Code Playgroud)

gitlab merge-request

5
推荐指数
1
解决办法
3227
查看次数

有没有一种方法可以转换存储在 QVariant 中的基本类型而不专门进行转换?

让我们考虑这个例子:

QVariant v1(1);
QVariant v2("goofy");
QVariantList list;

list << v1 << v2;

for (const auto& var : list) {
   qdebug() << var;

   // nasty part
   if (var.type == QVariant::Int) {
      int value = var.toInt();

      // do something
   } else if (var.type == QVariant::QString) {
      QString value = var.toString();

      // do something
   }
}
Run Code Online (Sandbox Code Playgroud)

调试函数显示QVariant的内部存储类型:

QVariant(int, 1) QVariant(QString, "goofy") 
Run Code Online (Sandbox Code Playgroud)

有没有办法避免ifs 并进行显式转换以访问内部类型?更具体地说,为了获得价值,我希望能够编写如下内容:

auto value = var.ToData();
Run Code Online (Sandbox Code Playgroud)

编辑:由于 QVariant 可以容纳很多类型,您甚至可以在其上添加自定义类型,将问题仅限于基本类型(int、double、bool、string)就足够了

c++ qt qvariant c++14

4
推荐指数
1
解决办法
1123
查看次数

auto的推导使编译器生成默认构造函数

考虑这段代码,其编写的唯一目的是练习:

class Param {
 private:
  struct Foo{  
    int bar;
  };
  
public:
  Foo foo;
};

int main()
{
  Param p;
  p.foo.bar = 5;
}
Run Code Online (Sandbox Code Playgroud)

使用cppInsight生成此中间代码:

#include <cstdio>

class Param
{
  
  private: 
  struct Foo
  {
    int bar;
    // inline Foo() noexcept = default;
  };
  
  
  public: 
  Foo foo;
  // inline Param() noexcept = default;
};



int main()
{
  Param p = Param();
  p.foo.bar = 5;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

一切看起来都很好,Param 可以实例化,bar 可以修改,但 Param::Foo 无法实例化。添加一个

int main()
{
  Param p;
  p.foo.bar = 5;
  Param::Foo …
Run Code Online (Sandbox Code Playgroud)

c++

2
推荐指数
1
解决办法
68
查看次数

总是声明违约构造函数的优点和缺点是什么?

为每个非用户定义的构造函数声明始终默认的构造函数有什么利弊?

考虑一个具有用户定义的构造函数的类,该构造函数不需要其他用户定义的构造函数,它将是:

class Foo
{
public:
   Foo() { // user-defined declaration }
   Foo(const Foo&) = default;
   Foo(Foo&&) noexcept = default;
   ~Foo() = default;

   Foo& operator=(const Foo&) = default;
   Foo& operator=(Foo&&) = default;
}
Run Code Online (Sandbox Code Playgroud)

这样做有其他实际的优点/缺点吗?

c++ default-constructor defaulted-functions c++11

1
推荐指数
2
解决办法
247
查看次数

没有针对全专业模板类的离线虚拟方法定义

我有这种结构:

静态库A

接口

class Interface
{
   public:
   virtual ~Interface() // no pure virtual dtor

   virtual void pureMethod1() = 0;
   virtual void pureMethod2() = 0;

   virtual void virtualMethod1();
   virtual void virtualMethod2();
};
Run Code Online (Sandbox Code Playgroud)

interface.cpp

include "interface.h"
Interface::~Interface() = default;
Interface::virtualMethod1() {}
Interface::virtualMethod2() {}
Run Code Online (Sandbox Code Playgroud)

使用A的静态库B

基准时间

#include "interface.h"
template<class T>
class BaseT final : public Interface
{
   static_assert(false, "can't use this specialization");
};
Run Code Online (Sandbox Code Playgroud)

专门1.h

#include "baset.h"

using MyType = BaseT<CustomClass1>;

template<>
class BaseT<CustomClass1> : public Interface
{
public:
   BaseT() = default;

   void pureMethod1() …
Run Code Online (Sandbox Code Playgroud)

c++ templates clang c++11

1
推荐指数
1
解决办法
2326
查看次数