小编muX*_*t2X的帖子

dummy()函数 - 应该是什么?

所以昨天我在这里读了这个问题并且发现了最好的投票答案,我用这样的代码来递归地调用lambda

std::function<void(int)>
    f {[&f](int i){
        // do something
    }},
    dummy((f(3), nullptr));
Run Code Online (Sandbox Code Playgroud)

我想知道这个dummy(...)部分是什么,所以我做了一些研究但却找不到任何关于它的东西.在答案中提供的代码片段中<utility>使用了标题,所以我想那个东西必须在那里声明,但我仍然找不到任何关于它的东西.

有人可以解释一下这个dummy函数(或仿函数)做了什么,声明它的位置以及它通常用于什么?

我的意思是显然在示例中它用于调用函数f.但它的实际目的是什么?

注意:我知道这个问题有点宽泛,但由于我找不到任何有关它的信息,我无法将问题集中在一个特定的问题上.此外,我希望我的问题的答案将帮助其他人找到有关神秘的信息dummy().

c++ c++11

34
推荐指数
2
解决办法
7223
查看次数

命名空间'std'中没有名为'u16string'的类型

我正在使用QT 5.5.0.

当我编译一个程序时,它显示"命名空间'std'中没有名为'u16string'的类型".有趣的是,我过去成功地编译了它,为什么它现在失败了?这似乎很麻烦qstring.h.

我如何解决它?这是错误发生的地方

#ifndef QSTRING_H 
#define QSTRING_H 
#if defined(QT_NO_CAST_FROM_ASCII) && defined(QT_RESTRICTED_CAST_FROM_ASCII) 
#error QT_NO_CAST_FROM_ASCII and QT_RESTRICTED_CAST_FROM_ASCII must not be defined at the same time 
#endif 

#include <QtCore/qchar.h> 
#include <QtCore/qbytearray.h> 
#include <QtCore/qrefcount.h>
#include <QtCore/qnamespace.h> 
#include <string> 
#if defined(Q_OS_ANDROID)
// std::wstring is disabled on android's glibc, as bionic lacks certain features 
// that libstdc++ checks for (like mbcslen). namespace std { typedef basic_string<wchar_t> wstring; }
#endif

#if defined(Q_COMPILER_UNICODE_STRINGS) || defined(Q_QDOC) 
   static inline QString fromStdU16String(const std::u16string &s); 
   inline std::u16string toStdU16String() const; …
Run Code Online (Sandbox Code Playgroud)

c++ qt

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

使用整数初始化列表初始化长双精度向量

假设我有一个简单的类:

class Pvector
{
  private:
  std::vector<long double> point_list;

  public:
  Pvector(std::initializer_list<long double> coords) : point_list(coords)
  {}
  Pvector(std::initializer_list<int> coords) : point_list(coords)
  {}
};
Run Code Online (Sandbox Code Playgroud)

这不会编译,因为std::vector模板化类型long double无法从模板化类型初始化列表中初始化自身int。然而,这相当不方便,因为删除了第二个构造函数后,我无法在代码中执行以下操作:

Pvector piece_movement({E.X - S.X, E.Y - S.Y, E.Z - S.Z});
Run Code Online (Sandbox Code Playgroud)

这是因为我的算术运算的结果类型是 类型int。所以我似乎陷入了困境。我希望能够将整数直接传递到 for 的构造函数中Pvector,但我仍然希望point_list是类型long double并且(以某种方式)使用我传入的整数进行初始化。我该如何去做呢?

c++ initialization list vector

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

重载赋值运算符以返回std :: vector

下面的函数将存储在类中的内容转换cVector为a std::vector并返回它.

template <class T> std::vector<T> cVector<T>::convertToStdVector()
{
    std::vector<T> vec;
    vec.resize(m_nSize);
    for (unsigned i = 0; i < m_nSize; ++i) {
        vec[i] = m_pData[i];
    }
    return vec;
}
Run Code Online (Sandbox Code Playgroud)

上面的工作完美,现在不是使用这样的函数,我想重载赋值运算符,基本上做同样的事情.

我尝试过以下方法:

template <class T> class cVector
{
public:

    cVector(unsigned nSize, AllocEnum eAllocType=MALLOC);
    cVector(T *pData, unsigned nSize, bool bCopy=false);

    // convert to std vector
    std::vector<T> operator=(const cVector<T> &cvec);

    //..
    //....
}

template <class T> std::vector<T> cVector<T>::operator=(const cVector<T> &cvec)
{
    std::vector<T> vec;
    vec.resize(m_nSize);
    for (unsigned i = 0; i < …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

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

标签 统计

c++ ×4

c++11 ×2

initialization ×1

list ×1

qt ×1

vector ×1