c++11 相关问题

将此标记用于必须编译为C ++ 11的代码(不使用C ++ 14或更高版本中引入的任何功能)。

C++ STL 的 __is_const(_Tp) 是如何工作的?

在研究一些类型特征时,我正在搜索 std::is_const() 是如何工作的。根据STL中的定义是 模板 结构

回答 1 投票 0

如何获取成员函数指针的类?

考虑代码: 班级人物 { 无效杀死(); 无效 send_to_wall(); } 模板 无效 GeorgeFunc(T fp) { ???对象; (obj.*fp)(); } int main() { GeorgeFunc(&Charac...

回答 2 投票 0

concat std::vector 和初始化列表

在 c++11 中你可以实现这个美妙的语法: 向量数字 = {1, 2, 3}; 有没有办法将进一步的初始化列表连接到现有向量上? 数字。??? ({4,5,6}); 或者 ...

回答 3 投票 0

如何“清除”std::promise?

我有一个程序,它应该循环启动8个线程,它将使用std::promise返回一个值。所以我想我需要创建一个由 8 个 Promise 对象组成的向量,获取它们的 future,并使用这些

回答 3 投票 0

静态初始化时抛出异常

cppreference.com 上的 Terminate() 文章指出,如果静态或 thead-local 对象在构造期间抛出异常,则将调用 Terminate()。我想用 s...

回答 1 投票 0

如何在类模板中传递函数而不使用auto?

我有以下功能: bool comp(Arm l, Arm r) { 返回 l.len < r.len; } Please, Assume Arm is appropriately declared struct. I have following class: template 我有以下功能: bool comp(Arm l, Arm r) { return l.len < r.len; } 请假设 Arm 是适当声明的结构。 我有以下课程: template<typename T, typename F> class Myclass { public: Arm v[10]; bool Myfunc(int i) { int l = i, r = i + 1; return F(v[l], v[s]); } }; 创建对象时: Myclass<Arm, decltype(comp)> obj; 我得到了error: expression list treated as compound expression in functional cast [-fpermissive] 我尝试过传递地址,我尝试过创建函数指针并传递它。我希望它适用于 C++ 11,使用 C++17 我得到它的工作使用: template<typename T, auto F> class Myclass { ... 并通过以下方式创建对象: Myclass<Arm, comp> obj; 这工作得很好。 您需要一个 F 的实例才能调用它: template<typename T, typename F> class Myclass { public: Arm v[10]; bool Myfunc(int i) { int l = i, r = i + 1; return F{}(v[l], v[s]); // ^^ } };

回答 1 投票 0

为什么c++语法是&address=variable而不是&address=&variable?

我最近开始学习c++中的指针和引用,并且很难理解为什么引用的语法是&address =variable而不是&address=&va...

回答 2 投票 0

C++11:在类中查找方法和错误:嵌套名称说明符中使用的类型不完整

使用 C++11 中的 CRTP 习惯用法,我试图检查派生类是否具有名为 size 的方法。 #包括 模板 结构 IsContainer { 模板<

回答 1 投票 0

具有 const 成员的对象上的复制赋值运算符

这个问题多年来一直困扰着我。 给定一个类: 类 Foo { 常量整型值; 民众: Foo& 运算符=(const Foo& copy_from) }; 我应该如何为 cl 实现复制分配...

回答 1 投票 0

std::find 当 std::vector 为空但给定初始大小时的行为

根据这篇文章,当容器为空时,std::find 返回结束迭代器。但是,当我使用 gcc (GCC) 11.2.1 20220127 (Red Hat 11.2.1-9) 运行此代码时 #包括 ...

回答 1 投票 0

强制 C++ 类具有不对齐的成员

考虑这个类: C3级 { 民众: uint16_t p1; uint16_t p2; uint8_t p3; }; sizeof(C3) 是 6。是否有任何编译器例程可以绕过对齐并强制其大小为 5?我试过了...

回答 2 投票 0

C++ 运算符中的参数类型转换如何工作?

我正在创建一个新类 VarDbl,其中包含一些显式构造函数以及 + 运算符: 类 VarDbl { ... 显式 VarDbl(双值,双不确定性); 显式 VarDbl(

回答 1 投票 0

如何简化这些函数模板特化?

我正在处理一些遗留代码,这些代码在头文件中定义了以下模板: 模板 std::string ConvertToString(const T& t); 在同一个头文件中,有

回答 1 投票 0

解压 std::array

我尝试通过 std::tie 解压 std::array: #包括 #包括 int main() { std::array arr = {1, 2, 3}; 整数a、b、c; std::tie(a, b, c) = arr;...

回答 2 投票 0

如何通过字符串名称访问结构体属性?

我有一个结构: typedef 结构体勾选 { 双开; 双高; 双低; 双关; 双 ema100; } 打钩; 我想访问给定密钥的属性: 勾选当前T...

回答 5 投票 0

std::atomic<X>::value_type 发生了什么?

根据本参考手册 对于每个 std::atomic (无论是否专用), std::atomic::value_type 都是 X。 但如果我尝试使用此类类型,则会出现编译错误。 ...

回答 2 投票 0

类模板:导致诊断错误的默认构造函数参数。是未定义的行为吗?

在开发一个库时,我发现了一个可以总结为以下代码片段的代码: 结构主流{}default_stream,custom_stream; 结构 Stream2{} custom_stream2; 模板 在开发一个库时,我发现了一个可以在此片段中总结的代码: struct MainStream{} default_stream, custom_stream; struct Stream2{} custom_stream2; template <class StreamSelection> class Manage { public: Manage(StreamSelection & out_stream = default_stream){ // do something }; }; void test(void) { Manage <MainStream> s1_a; //ok: use default_stream Manage <MainStream> s1_b(default_stream); //ok: use default_stream Manage <MainStream> s1_c(custom_stream); //ok: use custom_stream Manage <Stream2> s2_a(custom_stream2); //ok: use custom_stream2 //Manage <Stream2> s2_b; //diagnostic error if uncommented due the incompatible default argument. } 此类构造函数的目的是在使用 MainStream 实例化模板时提供默认参数,并且在未提供构造函数参数的情况下强制对其他参数产生诊断错误,并且还避免任何额外的模板专门化来实现目的。 也就是说,该代码片段可以按预期使用 GCC (-std=c++11 -pedantic -Wall -Wextra)、CLANG 和 MSVC 进行编译和工作。 不考虑代码风格,问题是:这件事是否涉及未定义的行为? 我能在 ISO 论文 N3337(最终的 C++11 工作草案)第 14.7.1 第 3 点找到的唯一参考: 除非调用是对函数模板显式特化或 显式专用类模板的成员函数, 函数模板或成员函数的默认参数 类模板在调用函数时隐式实例化 在需要默认参数值的上下文中。 但我不确定这个匹配(问题是关于默认参数的类型,而不是它的实例。) 有什么建议吗? 编辑:澄清一下,当使用“MainStream”以外的参数实例化类时,忽略的默认参数无论如何都有不兼容的类型。 [temp.inst/1] 类模板特化的隐式实例化会导致声明的隐式实例化,但不会导致类成员函数的定义或默认参数... 强调我的。再加上您已经找到的段落: [temp.inst/3] .. 当在需要默认参数值的上下文中调用函数时,函数模板或类模板的成员函数的默认参数将被隐式实例化。 这些规则旨在通过尽可能晚地推迟默认参数的实例化来使代码像您的工作一样,希望不需要它。

回答 1 投票 0

推导函数指针返回类型

我认为代码可以更好地说明我的需求: 模板 结构返回类型 { 类型定义???类型; }; 以便: return_type::类型 -> int 返回类型 我认为代码会更好地说明我的需求: template <typename F> struct return_type { typedef ??? type; }; 这样: return_type<int(*)()>::type -> int return_type<void(*)(int,int)>::type -> void 我知道 decltype 和 result_of 但他们需要通过参数。我想从单个模板参数推断函数指针的返回类型。我无法将返回类型添加为参数,因为这正是我想在此处隐藏的内容... 我知道boost中有一个解决方案,但我无法使用它,并且尝试从boost中挖掘它导致了巨大的失败(就像经常发生的那样)。 欢迎使用 C++11 解决方案(只要 VS2012 支持)。 如果您可以使用可变参数模板(12 年 11 月 CTP),这应该可以工作: template <class F> struct return_type; template <class R, class... A> struct return_type<R (*)(A...)> { typedef R type; }; 实例. 如果您无法使用可变参数模板,则必须为 0、1、2、... 参数提供特定的专业化(手动或预处理器生成)。 编辑 正如评论中所指出的,如果您还想使用可变参数函数,则必须添加一个额外的部分专业化(或者在无可变参数模板情况下为每个参数计数一个): template <class R, class... A> struct return_type<R (*)(A..., ...)> { typedef R type; }; 提问已经有一段时间了。对于 C++17,有一个有趣的选项(使用关键字 auto)。然而,语法与最初要求的有点不同,但结果(类型)是相同的。 首先,我们需要一个辅助函数。正如您在此处看到的,该函数接受一个函数指针并返回一个 R 类型的对象。我们仅在 decltype 语句中需要它,因此该函数永远不会被调用,因此前向声明就足够了。 template<typename R, typename... ARGS> static R return_type(R (*)(ARGS...)); // forward declaration only for decltype 技巧是提供函数指针作为模板自动参数,该参数被转发到 decltype 语句: template<auto FUNCTION_POINTER> using ReturnType = decltype(return_type(FUNCTION_POINTER)); 现在很容易获取返回类型了: #include <iostream> #include <type_traits> template<typename R, typename... ARGS> static R return_type(R (*)(ARGS...)); // forward declaration only for decltype template<typename R, typename... ARGS> static R return_type(R (*)(ARGS..., ...)); // overloaded variant for functions with C-ellipsis template<auto FUNCTION_POINTER> using ReturnType = decltype(return_type(FUNCTION_POINTER)); int func1(char c, int i, long l); // also here only forward declarations needed void func2(unsigned u, float f); double func3(bool b); bool func4(int, ...); int main() { std::cout << std::is_same_v<int, ReturnType<func1>> << std::endl; std::cout << std::is_same_v<void, ReturnType<func2>> << std::endl; std::cout << std::is_same_v<double, ReturnType<func3>> << std::endl; std::cout << std::is_same_v<void, ReturnType<func1>> << std::endl; std::cout << std::is_same_v<void, ReturnType<func4>> << std::endl; std::cout << std::is_same_v<bool, ReturnType<func4>> << std::endl; } 您可以在 Wandbox 中尝试完整的示例: https://wandbox.org/permlink/sKemxB44dgAVDlP6 示例中的更新:C 省略函数的重载助手。我将其用于多个 glibc 库函数。

回答 2 投票 0

如何从包含字符串消息向量的 uint8_t 向量中提取特定数据

我想从包含向量中的字符串的向量中提取数据。我要提取的数据部分是十六进制数字。从...中提取数据会更容易

回答 1 投票 0

unordered_map:find() 和 count() 哪个更快?

确定 unordered_map 容器是否包含具有指定键的项目的最快方法是什么?

回答 4 投票 0

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