c++11 相关问题

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

如何将同构 std::tuple 转换为 std::array?

如果我有 std::tuple (其中类型是同质的),是否有一个股票函数或构造函数可以转换为 std::array? 我能够得到它...

回答 7 投票 0

C++11 STL 容器和线程安全

我无法找到任何有关此的最新信息。 C++11 版本的 STL 容器是否有一定程度的线程安全保证? 由于性能原因,我确实希望他们不会......

回答 3 投票 0

是否可以在C++11中使用强制转换作为“数组切片”

我有一些由专用硬件填充的共享内存。它被声明为结构数组,例如: 结构体端口{ 整数数据[10]; 字符 port_id[8]; } 结构总线{ 端口端口[5]; ...

回答 3 投票 0

C++11:std::线程池?

在 C++03 中,我使用了带有自建线程池的 pthread,该线程池始终保持几个线程运行(因为 pthread_create 很慢),这样我就能够为小任务启动线程,而无需薄...

回答 4 投票 0

uint32_t vs uint_fast32_t vs uint_least32_t

我在 stdint.h 中看到了不同类型的整数定义。我将以无符号 32 位整数为例。 uint32_t 显然意味着 32 位无符号整数。这是我经常使用的。

回答 2 投票 0

为什么std::forward_list没有size()成员函数?

我一直使用C++11的forward_list作为快速插入的容器,没有太多内存开销,因为它是一个单链表。 在意识到forward_list没有size()之后...

回答 3 投票 0

模板类的嵌套类的类的部分特化

我想为嵌套在模板类中的类部分特化一个类,如下所示 模板 结构体基{ 无效打印(){ std::cout << "

回答 1 投票 0

你可以声明一个没有 auto 和/或模板的 lambda 变量吗?

在不使用 auto 或模板的情况下声明 lambda 变量或函数参数的表示法是什么?有什么办法可以做到吗?或者编译器是否为每个

回答 2 投票 0

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

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

回答 1 投票 0

对于 std::stringstream ss<< static_cast<int>(data[0]) + ".dat"; '+' 调用哪些方法?

为什么这段代码可以编译并运行? 预期的表达式是 ss<<"0x" << std::hex << "B_CS2_0x" << static_cast(data[0]) + ".dat&q...

回答 1 投票 0

C++0X 的发布日期[重复]

C++0X 有哪些最新消息? (或者我应该说 C++1X)发布日期已经确定了吗?

回答 5 投票 0

警告:“auto”类型说明符是 C++11 扩展

我有一个非常简单的C++代码语句auto a = 12;。 当我在 Linux 中使用 -std=c++98 选项用 g++ 编译它时,我收到了预期的错误: 错误:“a”没有命名类型 但是……

回答 2 投票 0

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

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

回答 1 投票 0

std::decay 和传值有什么区别?

N4296 中 std::decay 的规范留下了以下注释: [注:这个 行为类似于 左值到右值 (4.1), 数组到指针(4.2),以及 函数到指针 (4.3)

回答 2 投票 0

参数数量在编译时确定的 Lambda 函数

我想声明一个具有 N 个参数的 lambda 函数,其中 N 是模板参数。就像是... 模板 A类{ 标准::函数 我想声明一个具有 N 个参数的 lambda 函数,其中 N 是模板参数。类似... template <int N> class A { std::function<void (double, ..., double)> func; // exactly n inputs }; 我想不出用元函数范例来做到这一点的方法。 您可以使用嵌套的 typedef n_ary_function 编写模板 type。该类型可以如下使用: template <int N> class A { typename n_ary_function<N, double>::type func; }; 以下代码片段包含n_ary_function的定义: template <std::size_t N, typename Type, typename ...Types> struct n_ary_function { using type = typename n_ary_function<N - 1, Type, Type, Types...>::type; }; template <typename Type, typename ...Types> struct n_ary_function<0, Type, Types...> { using type = std::function<void(Types...)>; }; 元template采用模板、计数和类型,并使用类型的N副本调用模板: template<template<class...>class target, unsigned N, class T, class... Ts> struct repeat_type_N: repeat_type_N<target, N-1, T, T, Ts...> {}; template<template<class...>class target, class T, class... Ts> struct repeat_type_N<target, 0, T, Ts...> { typedef target<Ts...> type; }; template<template<class...>class target, unsigned N, class T> using repeat_type_N_times = typename repeat_type_N<target, N, T>::type; 现在,我们使用它: template<typename... Ts> using operation=void(Ts...); template<unsigned N, class T> using N_ary_op = repeat_type_N_times< operation, N, T >; template<unsigned N> using N_double_func = N_ary_op<N,double>; 我们测试一下: void three_doubles(double, double, double) {} int main() { N_double_func<3>* ptr = three_doubles; std::function< N_double_func<3> > f = three_doubles; } 并获胜。 您到底使用double, double, double做什么完全取决于您在上述系统中的情况。例如,您可以使用 lambda 来初始化 std::function。 您可以将 double, double, double 打包到 template<class...>struct type_list{}; 中,这样您就可以将其作为一个参数传递给另一个 template,然后专门对其进行解包。 A repeat_type 对于大 N 具有较少的递归: // package for types. The typedef saves characters later, and is a common pattern in my packages: template<class...>struct types{typedef types type;}; // Takes a target and a `types`, and applies it. Note that the base has no implementation // which leads to errors if you pass a non-`types<>` as the second argument: template<template<class...>class target, class types> struct apply_types; template<template<class...>class target, class... Ts> struct apply_types<target, types<Ts...>>{ typedef target<Ts...> type; }; // alias boilerplate: template<template<class...>class target, class types> using apply_types_t=typename apply_types<target,types>::type; // divide and conquer, recursively: template<unsigned N, class T, class Types=types<>> struct make_types:make_types< (N+1)/2, T, typename make_types<N/2, T, Types>::type > {}; // terminate recursion at 0 and 1: template<class T, class... Types> struct make_types<1, T, types<Types...>>:types<T,Types...> {}; template<class T, class Types> struct make_types<0, T, Types>:Types{}; // alias boilerplate: template<unsigned N, class T> using make_types_t=typename make_types<N,T>::type; // all of the above reduces `repeat_type_N_t` to a one-liner: template<template<class...>class target, unsigned N, class T> using repeat_type_N_times = apply_types_t<target, make_types_t<N,T>>; 对于大型N,上述可以显着减少编译时间,并处理template堆栈溢出。 您不能直接执行此操作。 你可以做这样的事情 template <unsigned N> class UniformTuple; template <> class UniformTuple <0> { }; template <unsigned N> class UniformTuple : public UniformTuple <N-1> { public: template <typename... Args> UniformTuple (double arg, Args... args) : UniformTuple <N-1> (args...) , m_value (arg) { } private: double m_value; }; template <int N> class A { std :: function <void (const UniformTuple <N> &)> func; }; 为了完整起见,这是一个不使用递归的解决方案: template <class Ret, class Arg, class Idx> struct n_ary_function_; template <class Ret, class Arg, std::size_t... Idx> struct n_ary_function_<Ret, Arg, std::index_sequence<Idx...>> { template <class T, std::size_t> using id = T; using type = std::function<Ret(id<Arg, Idx>...)>; }; template <class Ret, class Arg, std::size_t N> using n_ary_function = typename n_ary_function_< Ret, Arg, std::make_index_sequence<N> >::type; 在 Coliru 上观看直播 NoSid 的解决方案非常有创意(本质上是一一“追加”类型)。我编写的另一个解决方案可能需要更少的脑力劳动,如下所示使用 std::index_sequence (这是创建未知大小的参数包的一种非常自然的方法): #include <utility> #include <functional> #include <type_traits> template<typename T, long U> struct reduce { using type = T; }; template<typename U, typename IndexSequence> struct FunctionHolderImpl; template<typename U, long ... Indices> struct FunctionHolderImpl<U, std::index_sequence<Indices...>> { using value = std::function<void(typename reduce<U, Indices>::type...)>; }; template<long N> struct FunctionHolder { using func = FunctionHolderImpl<double, std::make_index_sequence<N>>::value; };

回答 5 投票 0

gcc 和 MSFT CL 之间的位域结构大小不同

我有以下代码: #包括 #pragma 包(1) 使用 MyType_t = union { uint8_t 缓冲区[16]; 结构体{ uint64_t:55; uint64_t b ...

回答 0 投票 0

为什么调用 std::string::begin() 时代码会崩溃?

这里有一个简单的代码片段来学习命令模式,它模拟一个简单的编辑器。 但我真的不明白为什么它在插入时崩溃。回溯似乎告诉我 Document::

回答 1 投票 0

c++11 是否可以创建一个带有允许各种返回类型 T 或 const T& 的函数的接口?

我想为返回消息的类创建一个接口。 我的问题是,有时返回一个字符串会更好,有时返回一个 const string& 会更好。 最好的方法是什么...

回答 1 投票 0

Boost Python C++ boost::python::list 输入 Python 参数类型与 C++ 签名不匹配

创建了一个测试函数来测试 Boost Python 是否可以将 Python 列表传递给 C++ 方法。但是,它会导致以下错误: Boost.Python.ArgumentError:boost_cpp 中的 Python 参数类型。

回答 1 投票 0

为什么这些 #include RcppArmadillo 会导致 R 在 Ubuntu 22.04 上使用 C++11 而不是 C++17 编译 Rcpp 代码?

我最近开始使用 Ubuntu 22.04 的机器,我发现我现有的(Windows).cpp 文件不再使用 sourceCpp 进行编译。问题是我需要使用 at ...

回答 1 投票 0

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