小编Zou*_*uch的帖子

使用clang格式对齐单行函数定义

我知道可以将变量定义和影响对齐clang-format,使用AlignConsecutiveAssignmentsAlignConsecutiveDeclarations得到类似的东西

int          a_value;
unsigned int another_value;
float        a_last_value;

a_value       = 2;
another_value = 3;
a_last_value  = 42.0f;

// Or both at the same time    
int          a_value       = 2;
unsigned int another_value = 3;
float        a_last_value  = 42.0f;
Run Code Online (Sandbox Code Playgroud)

现在,有没有办法用单行函数/方法做一个类似的东西(AllowShortFunctionsOnASingleLine例如使用单行)?我的意思是得到类似的东西

void SetPositions(const vec3_array& p) { m_Data.Positions = p; }
void SetUVs(const vec2_array& u)       { m_Data.UVs = u; }
void SetNormals(const vec3_array& n)   { m_Data.Normals = n; }
void SetIndices(const UIntArray& i)    { m_Data.Indices = …
Run Code Online (Sandbox Code Playgroud)

c++ clang-format

6
推荐指数
0
解决办法
753
查看次数

使用CMake为不同的构建类型创建构建树

我知道如何根据构建类型(发布,调试等)使CMake输出库和库,但是,为了减少(重新)编译时间,我希望CMake在不同的子文件夹中构建它们。

说我有这种树

|- CMakeLists.txt
|- build/
|- src/
Run Code Online (Sandbox Code Playgroud)

如果我有调试,发布和relwithdebinfo构建,我希望CMake自动为我创建一个像

|- CMakeLists.txt
|- build/
|--- Debug/
|--- Release/
|--- RelWithDebInfo/
|- src/
Run Code Online (Sandbox Code Playgroud)

等等。如果可以的话,这有可能实现我的目标吗?

我不希望出现诸如“您应该从不同的文件夹运行CMake”之类的答案,因为对于Visual Studio,这将导致多种解决方案,等等。我希望能够仅从一个文件夹运行CMake,并使它自己处理子文件夹。

c++ cmake

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

std :: vector在保留后的运算符[]上的msvc和gcc之间的行为差​​异,这是对的吗?

这段代码使用msvc(出界错误)失败,但似乎与gcc和clang一起工作正常.什么是正确的行为?

#include <iostream>
#include <vector>

int main() {
    std::vector<int> v;
    v.reserve(10);
    for (int i = 0; i < 10; ++i)
    {
        v[i] = i * 2;
    }

    for (int i = 0; i < 10; ++i)
    {
        std::cout << v[i] <<  " ";
    }
    std::cout << std::endl;

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

c++

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

强制函数参数匹配某些规则

有没有办法"强制"一个函数参数来遵循C++中的一些规则?
为了举例,我想写一个计算数学函数的n阶导数的函数.假设函数的签名是这样的:

double computeNthDerivative(double x, unsigned int n);
Run Code Online (Sandbox Code Playgroud)

现在,假设我想禁止用户为n输入0.如果用户输入为0,我可以使用assert或测试值和throw异常.
但有没有其他方法可以做这种事情?

编辑:条件将在编译时设置,但检查必须在运行时完成.

c++ c++11

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

std :: move,std :: forward,值类型和模板推导

假设我有这个代码

template <typename T> void Swap(T&& a, T&& b) {
    T tmp = std::move(a);
    a = std::move(b);
    b = std::move(tmp);
}

int main()
{
    int a = 2;
    int b = 3;
}
Run Code Online (Sandbox Code Playgroud)

根据我对这个讲话的理解,在调用时Swap(a, b),编译器应该推断出T&&应该T&转换它的事实.但在这种情况下,GCC给了我以下错误:

error: invalid initialization of non-const reference of type 'int&' from an rvalue of type 'std::remove_reference<int&>::type {aka int}' 
T tmp = std::move(a);
Run Code Online (Sandbox Code Playgroud)

我要么必须Swap使用Swap(std::forward<int>(a), std::forward<int>(b))或调用Swap(std::move(a), std::move(b)),要么替换Swap签名Swap(T& a, T& b). …

c++ templates c++11

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

标签 统计

c++ ×5

c++11 ×2

clang-format ×1

cmake ×1

templates ×1