小编Tom*_*ica的帖子

&*x操作是否会创建副本?

我有一些问题转换std::list<MyType>::iteratorMyType*.我有一个数组,MyType当我循环它时,我打电话给一些void doSomething(const MyType* thing).最后我这样做:

std::list<MyType> types = ... something here ...;
for( std::list<MyType>::const_iterator it = types.begin(), end = types.end(); it != end; ++it ) {
    doSomething(&*it);
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,无论我是否MyType通过此操作创建了内存副本:

&*it
Run Code Online (Sandbox Code Playgroud)

试图简单地传递迭代器就像它是指针一样,或者将迭代器强制转换为指针引发的编译器错误.

c++ pointers iterator

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

如何在Qt Designer中访问QTabWidget选项卡编辑器 - 当我双击对象名称对话框时弹出

我有一个QTabWidget,我想添加/删除/重命名单个选项卡.一些消息来源声称您可以双击它以获得选项卡编辑器.当我双击它时,我得到"对象名称"弹出窗口:

图片描述

我需要一个类似于用于组合框的编辑器:

图片描述

我还尝试通过在对象树中右键单击来编辑选项卡属性.菜单上没有任何有用的选项:

图片描述

如何管理标签?没有XML编辑器可以吗?如果是,我该怎么做

  • ...删除标签?
  • ...添加标签?
  • ...重命名标签?
  • ...更改标签布局?

qt qt-designer qtabwidget

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

我可以使用简单的 html 使用单行大小的 QTextEdit 吗?

我需要显示包含以下样式的文本的简单状态行:

  • 颜色
  • 胆大
  • 斜体

QTextEdit可以渲染简单的 HTML。但它也强行扩展到多行:

图片说明

添加了红色背景以强调QTextEdit. 所需大小是一行文本的大小。我如何做到这一点?

qt qt-designer qtextedit

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

如何哈希QVariant?

我需要QList<QVariant>用作关键词std::unordered_map.这样做的目的是通过在唯一键列上建立索引来优化对数据表的搜索.

所以我制作了这段代码.它不完整,但列出了表键列中出现的一些基本数据类型:

#include <unordered_map>
#include <string>
//std::hash
#include <functional>
//std::size_t
#include <cstddef>
// Hashing method for QVariantList
namespace std {
    template <>
    struct hash<QList<QVariant>>
    {
        std::size_t operator()(const QList<QVariant>& k) const
        {
            using std::size_t;
            using std::hash;
            using std::string;
            size_t hash_num = 0;
            Q_FOREACH(var, k) {
                // Make hash of the primitive value of the QVariant
                switch(var.type()) {
                    case QVariant::String : {
                        hash_num = hash_num^hash<string>(var.toString().toStdString());
                        break;
                    }
                    case QVariant::Char :
                    case QVariant::ULongLong :
                    case QVariant::UInt :
                    case QVariant::LongLong …
Run Code Online (Sandbox Code Playgroud)

c++ qt qvariant stdhash

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

使用本地.NET Core系统库,而不是将它们添加到每个包

我们的客户抱怨.dll我们为他们制作的.NET Core应用程序中的文件数量.即使我们解释说这是.NET Core的工作方式,他们的不满仍然存在.

现在我完全理解了他们的位置,当我第一次创建包时,我的下巴也掉了下来:

在此输入图像描述

请注意滚动条的小小.大多数库名称以Microsoft.或者System.- 那些不是我手动使用和安装的库开头.

所以问题是:我能做些什么让我们的客户满意吗?这些System.*库是否已作为.NET Core运行时的一部分安装在其计算机上?

我们目前正在瞄准.NET Core 1.0.

c# asp.net-core

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

在TableLayout中隐藏一行

我有一个包含三行和一列的表格布局:

在此输入图像描述

我想要的是在进度完成之前隐藏第二行,如下所示:

在此输入图像描述

在互联网上,我发现了两件事:

  1. 删除行 - 我不想删除该行,只是暂时隐藏它!
  2. 将行高设置为0 - 不起作用,由于某种原因,部分内部数据仍然可见.

那么我该如何真正隐藏这一行呢.不删除,不调整大小但实际上将其隐藏起来.

.net c# tablelayoutpanel

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

将编译时定义的大小的数组初始化为常量表达式

我有一个字符串数组,必须分配一次,并且它们的底层c_str必须在程序的整个持续时间内保持有效。

有一些API提供有关某些任意数据类型的信息。可能看起来像这样:

// Defined outside my code
#define NUMBER_OF_TYPES 23
const char* getTypeSuffix(int index);
Run Code Online (Sandbox Code Playgroud)

getTypeSuffix不是constexpr,那么这必须工作至少部分地在运行时。

必须提供的接口:

// Returned pointer must statically allocated (not on stack, not malloc)
const char* getReadableTypeName(int type);
Run Code Online (Sandbox Code Playgroud)

现在我的数组应该具有以下类型:

std::string typeNames[NUMBER_OF_TYPES];
Run Code Online (Sandbox Code Playgroud)

就我的目的而言,它将在包装器类中初始化,就在构造函数中:

class MyNames
{
  MyNames()
  {
    for (int i = 0; i < NUMBER_OF_TYPES; ++i)
    {
      names[i] = std::string("Type ") + getTypeSuffix(i);
    }
  }

  const char* operator[](int type) { return _names[(int)type].c_str(); }

private:
  std::string _names[NUMBER_OF_TYPES];
};
Run Code Online (Sandbox Code Playgroud)

然后以单例形式使用这种方式,例如:

const …
Run Code Online (Sandbox Code Playgroud)

c++ arrays c++11 c++14

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

我可以删除右值版本的对象的功能吗?

由于遗留原因,const char*我正在处理的代码中有很多用法。我试图限制这一点,偶然发现了我想知道的东西。我有类似的东西:

class AClass {
  public:
    const char* getValue() { return _value.c_str(); }
  private:
    std::string _value;
}
Run Code Online (Sandbox Code Playgroud)

但是,此类现在可以通过副本返回,例如。按功能:

AClass getAClass();
Run Code Online (Sandbox Code Playgroud)

我们也可能想将其传递给这样的东西:

void functionFromOtherLibrary(const char* value);
Run Code Online (Sandbox Code Playgroud)

现在考虑一下,这可能会导致错误:

functionFromOtherLibrary(getAClass().getValue());
Run Code Online (Sandbox Code Playgroud)

因为该中间体有资格在那时被销毁。即使上面的方法没问题,因为这只是一个陈述,所以这可能不会:

const char* str = getAClass().getValue();
functionFromOtherLibrary(str);
Run Code Online (Sandbox Code Playgroud)

所以我在想写一些类似的东西:

class AClass {
  public:
    const char* getValue() { return _value.c_str(); }
    const char* getValue() && = delete;
}
Run Code Online (Sandbox Code Playgroud)

禁止在右值上调用该方法。只是尝试给了我:

error C2560: cannot overload a member function with ref-qualifier with a member function without ref-qualifier
Run Code Online (Sandbox Code Playgroud)

我不确定这是否:

  1. 是有效的构造,并且
  2. 是永远必要的。我看过很多返回const char*s 的代码,它似乎总是依赖于这样一个事实,即返回值的对象仍然存在并保存源代码std::string。 …

c++ c-strings stdstring rvalue c++17

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

如何从std :: integer_sequence初始化静态数组?

我为符合以下规则的枚举创建了可迭代的生成器:

  • 枚举是一个整数序列,没有空格
  • 给定枚举的最后一个元素不是实际的枚举元素

该类如下所示:

template <typename EnumType, EnumType LENGTH>
class EnumArrayNonStatic
{
public:
  using ValueType = typename std::underlying_type<EnumType>::type;
  //! Initialize values via private constructor
  constexpr EnumArrayNonStatic() : EnumArrayNonStatic(std::make_integer_sequence<ValueType, (ValueType)LENGTH>{}) {}

  //! All values generated via std::integer_sequence
  EnumType values[(int)LENGTH];
private:
  //! Private constructor that populates values
  template <int... Indices>
  constexpr EnumArrayNonStatic(std::integer_sequence<int, Indices...>) : values{(static_cast<EnumType>(Indices))...} {}
};
Run Code Online (Sandbox Code Playgroud)

用法:

enum class TestEnum
{
  A,
  B,
  C,
  D,
  LENGTH
};
int main()
{
  for (const TestEnum val : EnumArrayNonStatic<TestEnum, TestEnum::LENGTH>().values)
  {
    std::cout << (int)val …
Run Code Online (Sandbox Code Playgroud)

c++ templates std c++17

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

如何为根节点的直接子节点创建选择器?

假设您获得了一个节点node,并且您必须提供由选择器给出的所有直接子节点Direct。直接子代的选择器是:

childParent > directChild
Run Code Online (Sandbox Code Playgroud)

但是,以下失败并在控制台中出现错误:

document.body.querySelectorAll(">div")
SyntaxError: '>div' is not a valid selector
Run Code Online (Sandbox Code Playgroud)

我有一个函数需要在选择直接子节点上执行某些操作,但我不确定如何处理这个问题。当然,除了使用for循环并用我自己的代码分析子级,完全放弃选择器。

下面的代码不起作用。是否可以对其进行更改以实现预期目的?

function doWithDirectChildren(parentNode) {
    // does not work, the selector is invalid
    const children = parentNode.querySelector(">.shouldBeAffected");
    for(const direct of children) {
        // do something with the direct child
    }
}
Run Code Online (Sandbox Code Playgroud)

我要求的是解决方案,而不是解决方法。

javascript queryselector

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