c++14 相关问题

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

调用模板函数的专业化与原型不明确

我刚刚编写了用于序列化或(某些)对象以及某些本机类型的函数,但遇到了一个奇怪的错误: : 在函数“int main()”中: :29:34:错误:调用

回答 1 投票 0

获取元组类型作为模板参数包

我有一个名为 serialize 的函数模板,它采用如下模板参数: 模板 std::string 序列化 (T 常量 & t); 我有不同的序列化用例...

回答 0 投票 0

C++ 线程:如何确定当前可用的堆,以避免用完

我正在查看的线程具有大约 32,000 KB 的预配置堆大小(它所属的进程)。在这个线程中,我希望在一个方法中分配大约 320kb,这并不经常被调用...

回答 0 投票 0

不同功能的多重继承

环境:Windows 10,IDE:Code::Blocks 20.03 我有一个与 C++ 中的多重继承相关的基本问题。如果我有如下所示的代码: 类基础 { 民众: 根据() {} 虚拟 ~Bas...

回答 1 投票 0

从 BOOST 或 C++14 类中删除 ACE_Singleton 和其他一些单例类

我们正在从 C++03 迁移到 C++14,这是从 ACE lib 走的路的决定。我们主要将 ACE 库用于 Singleton 对象和锁。因此,对于锁,我们可以使用 C++11/14 中的互斥锁,但是什么会……

回答 1 投票 0

Clang 与 G++ 在类模板参数数量和模板模板参数重新声明方面存在分歧

在下面的例子中,抽象是一个类模板,它的第一个参数是一个类型,第二个参数是另一个带有布尔值和任意数量的参数的模板。 模板 在下面的例子中,Abstract 是一个类模板,它的第一个参数是一个类型,第二个参数是另一个带有布尔值和任意数量的参数的模板。 template<bool,typename> struct Default; template< typename T = void, template<bool,typename ...> class = Default> struct Abstract; template<typename T> struct Abstract<T> {}; template<typename T, template<bool> class C> struct Abstract<T,C> : Abstract<T> {}; int main() {} Clang 和 C++ 的输出如下: 铿锵声: http://rextester.com/BJSW46677 错误:类模板部分特化不特化任何 模板参数; G++http://rextester.com/MDN65674 好 所以,我决定对 clang 友好,并在 Abstract 的声明中添加了第三个参数。 template< typename T = void, template<bool,typename ...> class = Default, typename = void > struct Abstract; 现在,Clang 和 G++ 都可以解决这个问题。我猜 Clang 抱怨的原因是因为专业化并没有真正专业化任何东西。但事实并非如此。它专门针对参数的数量。 接下来,我为模板模板参数添加了另一个特化。这个例子看起来像这样: template<bool,typename> struct Default; template< typename T = void, template<bool,typename ...> class = Default, typename = void > struct Abstract; template<typename T> struct Abstract<T> {}; template<typename T, template<bool> class C> struct Abstract<T,C> : Abstract<T> {}; template<typename T, template<bool,typename> class G> struct Abstract<T,G> : Abstract<T> {}; int main() {} Clang 和 C++ 的输出如下: 铿锵声: http://rextester.com/LJIOC38789 错误:Abstract<type-parameter-0-0, C, void>的重新定义注意:以前的定义是struct Abstract<T,C> : Abstract<T> G++: http://rextester.com/TSDRZ44717 OK -(声明中也不需要第三个参数) 我 不认为 Clang 就在这里,因为第三个特化对模板模板参数有效,可变模板参数允许我特化任意数量的参数。但是,我不确定。 问题: 哪个编译器有问题?为什么?如果能从规范中引用并更清楚地了解这个主题,那就太好了。 正如评论中所指出的,问题的第一部分——即是否允许专注于主模板中作为可变参数模板的模板模板参数——与另一个问题基本相同。如果您阅读了我对那个问题的回答,它包含了偏特化的偏序规则如何工作的摘要。特别是在您的情况下,问题是自 C++17 以来,template<bool,typename ...> class 参数可以接受 template<bool> class 参数,反之亦然;这意味着在 C++17 及更高版本中,偏序规则得出的结论是您编写的偏特化 not 比主模板更特化,这使得程序格式错误。 (FWIW,Godbolt 上可用的最新版本的 Clang trunk 接受专业化,我希望 CWG2398 最终能够以一种使这段代码格式良好的方式得到解决。) 关于问题的第二部分,关于一对偏专业: template<typename T, template<bool> class C> struct Abstract<T,C> : Abstract<T> {}; template<typename T, template<bool,typename> class G> struct Abstract<T,G> : Abstract<T> {}; 某些版本的 Clang 声称第二个版本是第一个版本的“重新声明”简直是无稽之谈;这可能是那些版本中的错误。这是固定在行李箱中的。

回答 1 投票 0

在CGAL中获取排列中每个有界面的顶点

我在原始点中有一组点,我将其转换为对偶点(一组线)。我想打印排列的每个有界面中涉及的顶点。 我正在尝试修改来自 h...

回答 0 投票 0

这个临时的 std::string 表达式是否可以接受?

我意识到这不是最有效的做法,但是大多数人都可以接受 C++ 来创建用于连接的临时 std::string 对象,就像这里的第 4 行一样吗? constexpr const char* const a =...

回答 0 投票 0

这个 temporarstd::string 表达式是否可以接受 c++?

我意识到这不是最有效的做法,但大多数人都可以接受 c++ 创建临时 std::string 对象进行连接,如第 4 行中所示? 1 constexpr const char* const ...

回答 0 投票 0

追踪 shared_ptr 的所有者?

在我们的应用程序中,我们即将(最终..)从原始指针切换到使用 C++11 smart_ptr 模板。 我们的应用程序中确实偶尔会出现错误,(非 C++)对象仍然保留对我们的 C++ 的引用

回答 3 投票 0

不能使用 std::map::emplace 插入没有复制构造函数的类的对象

我正在尝试编译以下代码: #包括 #包括 我的班级 { 民众: 我的类():m_cv(){} std::condition_variable m_cv; //只是为了说明...

回答 1 投票 0

创建不同类的函数调用映射

在这里输入图片描述 我正在尝试创建一个函数调用映射到另一个类中的函数。在这种情况下,“a”将是另一个类(事件类)的对象。我如何制作这张地图...

回答 0 投票 0

constexpr 类型检查

我正在尝试根据我是否将特征矩阵传递给它们来重载某些函数,并且我想让自己成为一些不错的 constexpr 函数以提高可读性。 为此,我决定...

回答 3 投票 0

使用具有两个或多个参数的类初始化 std::tuple

#include 类 NoCopyMove { 民众: NoCopyMove(int a) : a_(a), b_(a) {} NoCopyMove(int a, int b) : a_(a), b_(b) {} NoCopyMove(const NoCopyMove&) = 删除;

回答 2 投票 0

需要帮助理解模板类中的模板构造函数

我是模板新手。此代码(您可以在此处的 cpp.sh 上运行它)在模板类中有一个模板构造函数。我从需要指向要发送的向量的内存数组的指针的代码中提取/

回答 1 投票 0

无法访问父类的受保护成员,我不知道为什么

我正在练习训练 C++,问题是: a) 在“my_game”命名空间中,创建一个头文件,其中定义了一个类 “矩形”,必须具有受保护的访问级别成员数据...

回答 0 投票 0

通过cmake用sqlite3编译c++项目

所以我正在做一个大学项目,我决定要添加一个数据库(我们必须制作一个在控制台上运行的游戏)。我目前正在使用 GitHub Codespaces,所以基本上 VSCode 正在运行......

回答 0 投票 0

无法在 VS Code SSH Remote 中打开源文件“opencv2/core.hpp”C/C++(1696) 但可以编译

我的目标是确保正确设置我的环境。由于这个错误,当我编写错误代码时,我不会立即收到警告,而是在我尝试编译代码时对我尖叫。 问题...

回答 0 投票 0

有什么模板用法可以优化出分支吗?

A类有一个模板成员函数A::runImpl。函数 A::run 根据类构造函数中设置的 A::m_case 的值调用专门的实现。 在我的项目中...

回答 0 投票 0

为具有对象向量的类编写参数化构造函数时出错

尝试为 B 类编写参数化构造函数时出现错误“”。 B 类持有 A 类对象的向量。请帮我解决这个问题。 #包括 我在尝试为 B 类编写参数化构造函数时收到错误“”。 B 类持有 A 类对象的向量。请帮我解决这个问题。 #include <iostream> #include <vector> #define NUMBER 10 class A { int x; public: A(int a) : x(a) {} }; class B { std::vector<A> vec[NUMBER]; public: B(); }; B::B() : vec(NUMBER, A(10)) {} int main() { B b; return 0; } 编译时出现错误: check.cxx: In constructor ‘B::B()’: check.cxx:20:10: error: expression list treated as compound expression in mem-initializer [-fpermissive] 20 | B::B() : vec(NUMBER, A(10)) {} | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ check.cxx:20:10: error: invalid initializer for array member ‘std::vector<A> B::vec [10]’ 另外,帮我写默认和复制构造函数?? 问题是std::vector<A> vec[NUMBER];定义了一个大小为NUMBER的array,元素类型为vector<A>. 要解决此问题,请将 std::vector<A> vec[NUMBER]; 替换为 std::vector<A>; 或替换为 std::vector<A> vec = std::vector<A>(NUMBER);,如下所示: 方法一 在这里我们将std::vector<A> vec[NUMBER];替换为: class B { std::vector<A> vec; // no need to use NUMBER here public: B(); }; 注意默认构造函数初始化了 vector 成员,因此无需在类内初始化程序中执行此操作(如上所示)。 方法二 这里我们使用类内初始化器. class B { std::vector<A> vec = std::vector<A>(NUMBER); //corrected syntax public: B(); }; 工作演示

回答 1 投票 0

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