小编Ðаn*_*Ðаn的帖子

无法为 Qt Creator/qmake 自定义构建目录

我在尝试指定构建目录(在将所有文件复制到 DESTDIR 路径之前存储所有文件的目录)时遇到问题。

我的 .pro 文件中有以下值:

DESTDIR  = E:/Development/project/build/core/debug
OUT_PWD  = E:/Development/project/build/core/debug
OBJECTS_DIR = $$DESTDIR/.obj
MOC_DIR = $$DESTDIR/.moc
RCC_DIR = $$DESTDIR/.qrc
UI_DIR = $$DESTDIR/.ui
Run Code Online (Sandbox Code Playgroud)

现在,所有文件最终都在该位置,但是在构建期间,编译器始终使用“E:/Development/build/MinGW_32bit-Debug/src/core”文件夹(注意缺少的项目路径)。这很烦人,因为我想使用 /Project/build 目录作为这个位置(在我的 git repo 中没有跟踪)。

理想情况下,我希望这条路径是:E:\Development\project\build\src\core\debug.

我想这样做的原因是构建过程具有相同的位置来包含编译的库(它是一个子目录项目)。

我查看了Tools > Options > Build & Run > General设置,默认构建目录是:build/build-%{CurrentProject:Name}-%{CurrentKit:FileSystemName}-%{CurrentBuild:Name}

我查看了我的 project.pro.user 文件,发现以下行:

DESTDIR  = E:/Development/project/build/core/debug
OUT_PWD  = E:/Development/project/build/core/debug
OBJECTS_DIR = $$DESTDIR/.obj
MOC_DIR = $$DESTDIR/.moc
RCC_DIR = $$DESTDIR/.qrc
UI_DIR = $$DESTDIR/.ui
Run Code Online (Sandbox Code Playgroud)

但是我无法更改此值。如果我直接在文件中编辑这一行,只要我再次打开 Qt Creator,更改就会恢复。

这是 Qt Creator 的事情,还是 qmake 的事情?我最好使用不同的构建系统,比如 CMake 吗?

qt build-process

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

将类型附加到标量的首选机制?

[编辑:改变米/码到foo/bar; 这不是关于将米转换为码.]

将类型附加到标量的最佳方法是double什么?典型的用例是度量单位(但我不是在寻找实际的实现,boost有一个).

这看起来很简单:

template <typename T>
struct Double final
{
    typedef T type;
    double value;
};

namespace tags
{
    struct foo final {};
    struct bar final {};
}
constexpr double FOOS_TO_BARS_ = 3.141592654;
inline Double<tags::bar> to_bars(const Double<tags::foo>& foos)
{
    return Double<tags::bar> { foos.value * FOOS_TO_BARS_ };
}

static void test(double value)
{
    using namespace tags;
    const Double<foo> value_in_foos{ value };    
    const Double<bar> value_in_bars = to_bars(value_in_foos);
}
Run Code Online (Sandbox Code Playgroud)

那是真的吗?或者这种方法是否存在隐藏的复杂性或其他重要因素?

这似乎远远超过

   inline double foos_to_bars(double foos)
   {
      return foos …
Run Code Online (Sandbox Code Playgroud)

c++ templates types units-of-measurement

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

在运行时固定大小std :: vector?

性能在我的应用中至关重要

我需要一些工作方式std::experimental::dynarray,所以一个数组的大小是在运行时决定的.

所以我考虑使用包装类std::vector,提供其所有功能,但没有可能调用resize,reservepush_back.简而言之,所有改变其大小的方法(如果我错过了其中的一些,请记住我).

所以我开始写这个课:

CCVector.hpp:

template <typename T>
class CCVector{
public:
    CCVector(size_t size);
    T &operator[](typename std::vector<T>::size_type idx);
private:
    std::vector<T> v;
};
Run Code Online (Sandbox Code Playgroud)

CCVector.cpp:

template<typename T>
CCVector<T>::CCVector(size_t size) : v(size){}
template<typename T>
T& CCVector<T>::operator[](typename std::vector<T>::size_type idx){
    return  v[idx];
}
Run Code Online (Sandbox Code Playgroud)

但我这一点,我认为我必须重新实施我需要的every方法std::vector!例如begin,end,size等等,我不知道如何实现所有的人......此外,这是非常糟糕的维护:当我需要一个新的方法从std::vector我需要在重新实现它CCVector.

所有这些因为我想在运行时使用固定大小的数组.如何在不使用非标准的情况下解决这个问题std::experimental::dynarray

c++ vector c++11 c++14

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

有没有办法可以删除CString中的字符范围?

因为我们可以在std :: string中使用string.erase函数来删除某些字符范围,所以我可以使用任何函数来删除字符.

例如:

std::string string = "This is a test".
Run Code Online (Sandbox Code Playgroud)

我可以用

string.erase(2,(string.length()));
Run Code Online (Sandbox Code Playgroud)

CString中有类似的方法吗?

谢谢.

string mfc erase visual-c++

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

如何针对以下场景进行内存分配?我设法弄糊涂了

我在下面提到了名为"Employee"的属性类.

public class Employee
{
    public int EmpID { get; set; }
    public int DeptId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我们都知道"int"数据类型将存储在堆栈中,而Object类型将存储在堆中,如下面的snap所示.

在此输入图像描述

这里我的问题是,当我要创建一个Employee类的对象时

Employee objEmployee = new Employee();
Run Code Online (Sandbox Code Playgroud)

如何进行内存分配?

任何文献或相关链接将不胜感激.

c# clr stack memory-management heap-memory

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

在优化时,将`register`关键字与现代编译器一起使用是否无用?

C register关键字为编译器提供了一个提示,希望将变量存储在寄存器中,而不是存储在堆栈中.如果喜欢,编译器可以忽略它.我知道,当你打开优化编译时,它几乎没用了,但它完全没用吗?

更具体地说:对于{gcc,clang,msvc} x {-Og,-O,-O2,-O3}的任何组合:register在决定是否实际分配寄存器时会被忽略?如果没有,是否存在使用它有用的麻烦?

笔记:

  • 不是问关键字是否有效果 ; 当然它确实 - 它阻止你使用该变量的地址; 如果你根本没有进行优化,它将为变量的寄存器赋值或内存赋值之间的区别.
  • 只有一个编译器/一些上述组合的答案是非常受欢迎的.

c gcc clang visual-c++

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

处理c#中的特殊字符

在C#控制台应用程序中, 我正在使用stringbuilder将数据写入本地文件. 这似乎是错误处理特殊字符

Muñoz
Run Code Online (Sandbox Code Playgroud)

输出到文件

Muñoz
Run Code Online (Sandbox Code Playgroud)

有点不知道如何正确管理.

c#

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

我是C++的新手,并努力弄清楚为什么我的代码完美运行但在运行后仍然返回一个荒谬的数字

我想确定一个数字是偶数还是奇数.因为我想练习我对类的新知识,所以我编写了一个类并构建了一个函数来帮助我确定数字是奇数还是偶数.

在编译和测试我的代码之后,它运行得很完美.但是在打印出函数中嵌入的print语句之后,它也会输出很多数字.

为什么程序会返回该数字?

 #include <iostream>

    using namespace std;

    class numbers{

        public:
           int odev(int num)
           {
              if (num % 2 == 0){
                cout << num << " is an even number" << endl;
              }
              else{
                cout << num << " is an odd number" << endl;
              }

           }

            int greatest_number(int fnum, int snum, int tnum)
            {
                if (fnum > snum && fnum > tnum){
                    cout << fnum << " is greatest among these" << endl;
            }
                    else if (snum > fnum …
Run Code Online (Sandbox Code Playgroud)

c++

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

删除类型强制转换指针的最佳方法

我创建了一个函数,该函数可以解除分配指向基类的对象的内存。

关于字段变量,可以将对象类型转换为派生类之一(DerA,DerB,DerC)。

删除对象的最佳做法是什么。

delete object;
delete (DerA*)obj;
delete static_cast<DerA>(object)
Run Code Online (Sandbox Code Playgroud)

或以上所有功能都做同样的工作。

我的代码示例如下所示

void deal(BaseClass *obj)
{
   if(obj)
   {
      switch(obj->m_id)
      {
         case DerivedAObj:
         {
             delete (DerA*)obj;
             break;
         }
         case DerivedBObj:
         {
             delete static_cast<DerA>(obj);
             break;
         }

      }
   }
}
Run Code Online (Sandbox Code Playgroud)

c++ memory-management

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

使用 CMake 编译带有调试符号的单个文件

我有一个项目,我正在使用 CMake 调试模式使用 gcc 进行编译,以便能够调试一个函数。然而,在我达到这个功能之前,需要花费很多时间。有没有办法只编译一个文件,-g -O0同时编译其余文件-O2

gcc cmake

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