小编Las*_*öld的帖子

如何使用参数数量定义 std::tuple<...>

我需要与在表单上使用(误用)元组的代码进行交互:

using Tuple = std::tuple<double, double, double, double, int, int, int, int>; // etc..
Run Code Online (Sandbox Code Playgroud)

我想知道是否有办法用模板来定义这个元组,而不是在表单中:

using Tuple = SomeType<4, double, 4, int>::Type; // expands to the above tuple
Run Code Online (Sandbox Code Playgroud)

并指定参数的数量而不是指定每种类型。

我宁愿只使用 std libs,但接受 boost。我需要它与 c++14 一起工作。使用宏很容易,但我已经有了一个宏解决方案,我不喜欢在这种代码的代码中使用宏。

上面的元组是一个小例子。实际上,元组要大得多,包含更多的类型和更多的每种类型。

c++ templates c++14

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

使用旧头文件作为 c++20 模块

我正在将旧代码转换为可作为 c++ 模块导入的代码。问题是我希望它仍然可以工作并且可以轻松维护为旧的标头/源版本。我该怎么做(如果可能)。

是否可以创建一个导出标题内容的模块?(任何其他可以让您维护旧的 .cpp/.h 文件和模块文件的解决方案也被接受)

玩具示例:

// In vector.h
template <typename T>
struct Vector {
    T x, y;
}

// In .cppm
export module vector;
// #include "vector.h"
// Export struct/class Vector from header
Run Code Online (Sandbox Code Playgroud)

我尝试过的只是export Vector不同的版本,有和没有模板等。

额外问题:您可以为 std lib 执行此操作吗?(例如 iostream 或字符串)

c++ clang++ c++-modules

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

覆盖 const 函数谷歌模拟

当尝试使用 google test 模拟函数时,我仍然收到一条警告,指出我错过了“覆盖”

    MOCK_METHOD(bool, functionName, (), (const override));
Run Code Online (Sandbox Code Playgroud)

我收到的警告指出

xxx.h:31:22: error: 'functionName' overrides a member function but is not marked 'override'
xxx.h:25:17: note: overridden virtual function is here
Run Code Online (Sandbox Code Playgroud)

如何同时使用override和标记模拟函数?const

c++ googletest googlemock

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

使用 clang 将 std lib 作为模块导入

我正在尝试使用 clang 中的模块,并希望将标准库包含为模块而不是包含。

目前我这样做

#include <iostream>
#include <string>
Run Code Online (Sandbox Code Playgroud)

看来您在 msvc 中应该能够导入标准库,例如

import std.core;
Run Code Online (Sandbox Code Playgroud)

然而,当使用 clang 时,这似乎没有实现,或者以另一种方式实现。

我的问题是:是否可以像微软建议的那样导入 stl-includes,或者是否可以将标准库包含映射到模块 somhow。

注意:我无法使用的原因#include <...>或者#import <...>是因为其他错误可能会导致其自身问题。所以我认为import std.core如果可能的话,获取或类似是现在要走的路。

ModernesCpp还提到了 std.core。

c++ clang++ c++20 c++-modules

4
推荐指数
2
解决办法
731
查看次数

从 std::filesystem::path 中删除点前缀“./”

有没有一种简单的方法可以去除./路径的起点。例如:我有一个路径./x/y,我想将其转换为x/y(没有第一个点和斜杠)。有标准的方法吗?

#include <iostream>
#include <filesystem>

namespace filesystem = std::filesystem;

int main() {
    auto path = filesystem::path{"./x/y"};
    std::cout << path << std::endl;
    std::cout << ???? << std::endl; // How do I do this?
}
Run Code Online (Sandbox Code Playgroud)

c++

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

标签 统计

c++ ×5

c++-modules ×2

clang++ ×2

c++14 ×1

c++20 ×1

googlemock ×1

googletest ×1

templates ×1