小编use*_*108的帖子

QML项目的子项列表深层副本

我想要制作一个项目儿童财产的深层副本.我尝试过这样的事情:

Item {
  property variant itemsCopy

  Component.onCompleted: {
    var tmp = otherItem.children
    itemsCopy = tmp
  }
}
Run Code Online (Sandbox Code Playgroud)

但是当更改otherItem.children(由于不同的Z值排序)时,itemsCopy也会更改.是否有解决方法来打破绑定或防止孩子被分类的方法?我试过Array s,list,没什么用.更改tmp的成员将被忽略.

qt qml

3
推荐指数
2
解决办法
5929
查看次数

使用std :: memcpy在内存中移动对象

是否允许将类实例对象从一个位置移动到另一个位置(例如,通过使用std::memcpystd::memove?假设源位置和目标位置具有相同的对齐方式.然后将目标"object"转换为源对象的类型并调用它.C++ 11标准的哪一部分禁止这个?

c++ c++11

3
推荐指数
2
解决办法
861
查看次数

联合中重叠的数组?

我有这门课:

template <typename T, ::std::size_t M, ::std::size_t N>
struct matrix
{
private:
  union
  {
    T idata[M * N];
    T data[M][N];
  } u_;
};
Run Code Online (Sandbox Code Playgroud)

我使用idataunion成员初始化矩阵和data成员进行访问.这两个数组似乎完全重叠在我的用例中.标准是否保证始终如此?也就是说,这两个u_.idatau_.data具有相同的起始地址和相同的大小?

编辑:

我使用这个constexpr构造函数来初始化矩阵:

template <typename ...U>
constexpr matrix(U&&... args) : u_{{::std::forward<U>(args)...}}
{
}
Run Code Online (Sandbox Code Playgroud)

如果没有联合,我将无法在constexpr构造函数中初始化矩阵.

c++ c++11

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

is_defined constexpr函数

我需要知道在指定noexcept说明符时是否定义了NDEBUG.我正在考虑这个constexpr功能:

constexpr inline bool is_defined() noexcept
{
  return false;
}

constexpr inline bool is_defined(int) noexcept
{
  return true;
}
Run Code Online (Sandbox Code Playgroud)

然后使用它像:

void f() noexcept(is_defined(NDEBUG))
{
  // blah, blah
}
Run Code Online (Sandbox Code Playgroud)

标准库或语言是否已经为此提供了便利,以便我不会重新发明轮子?

constexpr c++11 c++14

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

在编译时检测是否禁用了异常

我试图在编译时检测是否已使用(-fno-exceptions)开关禁用了异常.我试过评价:

noexcept(throw)

但是如果在gcc和clang下禁用了异常,则无法编译.

编辑:看看这里.

c++ exception

3
推荐指数
2
解决办法
1293
查看次数

防止左值引用绑定到非const对象

我想阻止将对非const对象的左值引用绑定到我的函数参数,目前我有这样的代码:

template <typename T>
using remove_cr = std::remove_const<typename std::remove_reference<T>::type>;

template <typename T>
using is_nc_lvalue_reference
  = std::integral_constant<bool,
      std::is_lvalue_reference<T>::value
      && !std::is_const<typename std::remove_reference<T>::type>::value
    >;

template <typename T>
void func(T && v, typename std::enable_if<
  std::is_same<THE_TYPE_I_WANT, typename remove_cr<T>::type>::value
  && !is_nc_lvalue_reference<T>::value>::type* = 0)
{
}
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎是一大堆代码,是否存在更优雅的SFINAE或非SFINAE方法?我不需要完美转发,但如果我不使用它,我就输了T.

这个想法是,const不应该修改对象,因此我可以将它们转换为其他表示并将它们提供给它们,比如说不同的进程.如果给出了非const引用,则可以修改它引用的对象,但是其他进程无法访问转发进程的内存空间,因此我不转发它.

c++ c++11

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

lambda仿函数赋值解决方法

下面的代码有什么问题吗?

#include <iostream>

#include <type_traits>

template <typename T>
void assign_lambda(T&& f)
{
  typedef typename std::remove_reference<T>::type functor_type;

  typedef typename std::aligned_storage<sizeof(functor_type),
    std::alignment_of<functor_type>::value>::type buffer_type;

  static char store[sizeof(buffer_type)];

  auto const p(new (store) functor_type(std::forward<T>(f)));

  (*p)();
}

int main()
{
  for (int i(0); i != 5; ++i)
  {
    assign_lambda([i](){ std::cout << i << std::endl; });
  }

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我担心这可能是非标准的和/或危险的.

编辑:为什么要初始化成一个char你问的数组?sizeof(buffer_type)如果块足够大,可以从堆中分配一块大小并重复用于重复分配(即避免重复的内存分配).

void*operator new(std :: size_t size);

效果:由new-expression(5.3.4)调用的分配函数(3.7.4.1),用于分配大小合适的存储字节,以表示该大小的任何对象.

我想如果我从堆中分配对齐问题就会消失.

c++ c++11

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

const值和RVO

说我有这个功能:

template <class A>
inline A f()
{
  A const r(/* a very complex and expensive construction */);

  return r;
}
Run Code Online (Sandbox Code Playgroud)

声明是不是一个好主意r const,因为const变量无法移动?请注意,返回的值不是const.我正在努力解决的问题是,r确实如此const,但这样做可能不是一个好主意.然而,限定符应该是帮助编译器生成更好的代码.

c++ c++11

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

为什么是modelview矩阵?

如果这是一个愚蠢的问题,我很抱歉,但我很长一段时间都在想为什么那里有很多例子顶点着色器,包含一个模型视图矩阵.在我的程序中,我有以下情况:

  • 投影矩阵几乎没有变化(例如在应用程序窗口的大小调整上)并且它是分开的,这很好,
  • 模型矩阵经常变化(例如模型上的变换),
  • 视图矩阵也经常变化(例如改变观看方向,四处移动......).

如果我在顶点着色器中使用模型视图矩阵,我必须在CPU上执行矩阵乘法并上传单个矩阵.另一种方法是上传模型和视图矩阵并在GPU上进行乘法运算.关键是,视图矩阵不一定与模型矩阵同时发生变化,但如果使用模型视图矩阵,则只要其中任何一个发生变化,就必须执行CPU乘法和上传.那么为什么不使用单独的视图和模型矩阵来实现快速GPU乘法,并且可能大致相同数量的GPU矩阵上传?

opengl glsl glsles

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

sqlite3_reset()何时需要?

在你告诉我阅读文档之前,是的,我已经阅读过了.但是我自己的测试告诉我,我有时可以反复调用sqlite3_step()一些准备好的语句而不先重置它们.例子是:BEGINCOMMIT.当我需要重置准备好的声明时,你能否解释一下,因为我希望尽可能避免拨打电话?

编辑:文档说(我的大胆):

准备好的语句对象的生命周期通常如下:

c sqlite

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

标签 统计

c++ ×6

c++11 ×6

c ×1

c++14 ×1

constexpr ×1

exception ×1

glsl ×1

glsles ×1

opengl ×1

qml ×1

qt ×1

sqlite ×1