c++17 相关问题

C ++ 17是2017年批准的C ++标准的名称。它基于以前的C ++ 14标准,改进了核心语言和标准库,并添加了一些新的语言功能。

如何使用可能不完整的类型参数调用模板函数

模板函数 func 设计为可在任何地方使用。它对任何 T 都有相同的函数体。我只想写一次它的函数体。但功能取决于定义类型 模板功能func<T>设计用于任何地方。对于任何T,它都有相同的函数体。 我只想写一次它的主体。但该功能取决于 type<T> 的定义才能正常工作,并且在某些情况下没有 type<T> 的定义。请参阅以下示例(C++17 中): /// type.h #include <stddef.h> #include <stdint.h> #include <type_traits> template<typename T, typename = void> struct type; template<typename T> size_t func() { return type<T>::magic; } template<typename T> struct type<T, std::enable_if_t<std::is_arithmetic_v<T>>> { static constexpr size_t magic = sizeof(T) * 2; }; /// my_type.h struct MyStruct { int a; static void Dummy(); }; /// my_type.cpp #include "my_type.h" #include "type.h" template<> struct type<MyStruct> { static constexpr size_t magic = 123; }; void MyStruct::Dummy() { (void)func<MyStruct>(); } /// main.cpp #include "my_type.h" #include "type.h" int main(int argc, char **argv) { func<int>(); // OK func<MyStruct>(); // Error } 我怎样才能做到这一点: 只写一次func<T>的正文。 当 func<T> 不完整时,可以调用 type<T>。 注意:有一个 Dummy 函数,用于强制编译器为 func<MyStruct> 生成代码,以便链接器满意。 使用显式实例化: /// my_type.h struct MyStruct { int a; }; // Explicit instantiation declaration extern template size_t func<MyStruct>(); /// my_type.cpp #include "my_type.h" #include "type.h" template<> struct type<MyStruct> { static constexpr size_t magic = 123; }; // Explicit instantiation definition template size_t func<MyStruct>(); 声明它存在于头文件中(因此包含头文件的任何内容都可以看到声明,而不是尝试实例化模板本身),并在类型完成后在源文件中定义它。 您也不再需要Dummy,无论如何也不能保证它能工作。

回答 1 投票 0

为 QObject 创建一个 Q_PROPERTY,该 QObject 拥有自己的 Q_PROPERTY

我有一个带有两个 Q_PROPERTIES 的 QInnerItem 类 QInnerItem : 公共 QObject { Q_OBJECT Q_PROPERTY(int bar1 READ bar1 WRITE setBar1 NOTIFY bar1Changed) Q_PROPERTY(int bar2 READ bar2 WRITE

回答 1 投票 0

将常量导出到 QML

大家好。我提前为我的英语道歉。 有人可以帮助我吗?我不明白为什么会发生这种情况以及我做错了什么。 我有一个带有静态常量的单独类(当前...

回答 1 投票 0

为什么 `std::string_view` 不可修改?

我开始用 std::string_view 进行实验。 它有一个非常丑陋的特点。你不能说: std::string_view 和 std::string_view 就像很棒的 std::span 一样。 所以,你不能...

回答 1 投票 0

我不明白带有包扩展的 lambda std::array 的初始化

我发现以下代码(由 phoeen 编写)在运行时实例化基于索引的变体: 模板 std::variant make_variant(std::size_t i) { 断言(我 < s...

回答 1 投票 0

使用星号的金字塔形状

使用星号的金字塔形状 你好,我是 C++ 新手,我尝试了嵌套循环,但我不知道下一步是什么,看到了一些解决方案,但我不明白。 如果你知道,请写下来。

回答 1 投票 0

有什么方法可以让它自动检测 std::array 中的大小<int,5>

模板 void print(const std::array& data){ for(自动它:数据){ std::cout << it << std::endl; } } int main(){ std::array template<typename T, size_t N> void print(const std::array<T,N>& data){ for(auto it : data){ std::cout << it << std::endl; } } int main(){ std::array<int,5> arr{1,2,3,4,5}; print(arr); ^ | /* Here in main method in the std::arr<int,5> I am explicitly specifying the size of the array but I'll need just like template it should detect size automatically and I don't want to specify the size explicitly */ } 我尝试过: template <typename Container> void print(const Container& container) { std::copy(std::begin(container), std::end(container), std::ostream_iterator<typename Container::value_type> (std::cout," ")) } 而且效果很好,就像这样。我需要模板而不需要像这样在 std::array<int,5> 中明确指定大小。 C++17 引入了类模板参数推导。因此,只需完全删除模板参数即可: std::array arr{1,2,3,4,5};

回答 1 投票 0

使用 Qt 库在图形编辑器中选择画布上的特定形状时出现问题

我正在编写一个图形编辑器程序。在程序中,我只能绘制两种形状:圆形和矩形。我能够正确选择并拖动矩形,但对于圆形它我...

回答 1 投票 0

如何在c中调用c++结构体函数?

$树 。 |-- 外部.c |-- sc.h `--serial_comm.cpp $ 猫外部.c #include“sc.h” int main() { 结构 MyStruct* sc; sc->myFunction1(); } $ 猫 SC.H #ifndef SC_H #d...

回答 1 投票 0

如何使 std::function<void(X)> 接受第一个参数是 X 的多态子类型的 lambda?

假设我有一个像这样的通用事件类: // 事件(通用) 结构事件{ // 事件类型 std::string m_type; // c-tor 事件(const std::string& type) : m_type(type) { /* ...

回答 1 投票 0

C++11/17 中 std::atomic 的间接和直接初始化。有什么区别?

在 CPP Con 2017 网络研讨会上,Fedor Pikus 说:“它必须是直接初始化” 这是网络研讨会的链接。 这些初始化方法有什么区别? (和

回答 1 投票 0

为什么编译器在 C++17 中调用 std::vector<A>::emplace_back(int, int) 时尝试调用 A(int) 来构造而不是 A(int, int) ?

#包括 结构体A{}; int main() { std::向量a; a.emplace_back(0, 0); } 使用 -std=c++17 编译此代码,显示以下错误: /usr/include/c++/13/bits/

回答 1 投票 0

函数模板或泛型 lambda 的废弃 if-constexpr 实例化中存在依赖名称错误

根据我的理解,依赖名称查找在模板实例化之前不会发生,并且废弃的 if-constexpr 语句中的模板调用不会被实例化。因此,我会...

回答 1 投票 0

在 C++20 之前,有没有办法将未知大小的数组传递给 lambda?

我有一个宏,它创建 Info 类的实例,该类接受具有模板化大小的数组作为构造函数参数。尺寸信息用于检查。 我想检查一下...

回答 1 投票 0

尽管有 core5compat 和 QT_DISABLE_DEPRECATED_BEFORE,Qt 5 项目仍无法在 Qt 6 中编译

在更新 Ubuntu 时出现一些混乱之后,我的计算机最近在 Debian 12 上进行了全新安装。 我重新安装了 Qt Creator 和 Qt6.6。我打开了几个以前在 Qt5 下工作的旧项目。

回答 1 投票 0

std::variant 函数中的多个返回类型

我正在尝试检索存储在具有变体类型的返回变量中的值,但我正在努力使其工作。你有什么想法? :) 我几乎尝试了一切,包括临时...

回答 1 投票 0

节点句柄中的constexpr

我想要求澄清标准指示的节点句柄类型的具体情况。我读了cppreference信息,其中指定了Node-handle的默认构造...

回答 1 投票 0

g++ 版本标志未正确切换 c++ 版本

我过去通常使用c++11,并使用“-std=c++11”标志进行手动编译和生成文件来执行此操作。现在我想使用文件系统库,这需要c++1...

回答 1 投票 0

使用主机 libc++ 在 Linux 上构建 WebRTC

当尝试在 Linux 上构建 WebRTC 时,静态甚至共享构建中都有大量未定义的符号。其中包括 std::__Cr 命名空间中的 basic_string 内容(我猜那就是

回答 2 投票 0

std::Optional 的替代品,可以报告失败原因

有没有 std::Optional 的替代方案,我不必将结果作为参数传递给函数。我希望该函数不修改其参数(更加纯粹/不可变)。 长话短说

回答 4 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.