c++11 相关问题

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

为什么 std::random_shuffle 方法在 C++14 中被弃用?

根据 std::shufle 上的 cppreference.com 参考站点,以下方法在 c++14 中已被弃用: 模板< class RandomIt > void random_shuffle( RandomIt 首先,RandomIt l...

回答 5 投票 0

将原始指针内容移动到向量

我有一个原始指针,比如说, char * ptr = (char *) malloc(LIMIT); size_t 尺寸; fill_with_data(ptr, LIMIT, &size); 现在我想使用 std::vector 包装指针数据。 自动 v = v...

回答 4 投票 0

当类具有非 constexpr std::array 时,如何使用 std::array.size() 作为模板参数

班级学生有一个名为 name 的 std::array 和一个整数年龄。学生有一个名为encode的成员函数,它使用name.size()作为调用全局模板函数encode

回答 2 投票 0

使用 lambda 时如何显式实例化模板

C++ 模板声明和定义在不同的文件中。 // 接口.hpp 模板 constexpr bool is_static_task_v = is_invocable_r_v 不同文件中的 C++ 模板声明和定义。 // interface.hpp template <typename F, typename... Args> constexpr bool is_static_task_v = is_invocable_r_v<void, F, Args...> && !is_invocable_r_v<int, F, Args...>; template <class F, class... Args, std::enable_if_t<is_static_task_v<F, Args...>, void>* = nullptr> static void enqueue(uint32_t service_id, F&& f, Args&&... args); // interface.cpp template <class F, class... Args, std::enable_if_t<is_static_task_v<F, Args...>, void>*> void enqueue(uint32_t service_id, F&& f, Args&&... args) { ... } /***** explicit instantiate template ***/ template void enqueue<>(unsigned int, void (*&&)()); 当我显式实例化模板时,它对 lambda 函数没有用处?怎么解决? 例如 // main.cpp void foo() {std::cout << "foo" << std::endl;} enqueue(1,&foo) // it works enqueue(1,[](){std::cout << "foo" << std::endl;} // it link error 我知道需要显式实例化模板,但我不知道如何实例化这个模板。 叮当错误: enqueue(uint32_t, F&&, Args&& ...) [with F = main(int, const char**)::<lambda()>; Args = {}; std::enable_if_t<is_static_task_v<F, Args ...>, void>* <anonymous> = 0; uint32_t = unsigned int] 我像这样为 lambda 设置了模板,但仍然不起作用: template void enqueue<void (*)(), , (void*)0>(unsigned int,void (*&&)()); [](){std::cout << "foo" << std::endl;}的类型是某种匿名闭包类型。我们称之为Lambda。因此, enqueue(1,[](){std::cout << "foo" << std::endl;}) 调用 enqueue<Lambda>(Lambda&&),而不是像您显式实例化的那样 enqueue<void(*)()>(void(*&&)())。 您需要将其转换为 void(*)() 函数指针,可以通过以下方式之一完成(请参阅:获取指向 lambda 的函数指针?): void(*fp)() = [](){std::cout << "foo" << std::endl;}; enqueue(1, std::move(fp)); // or enqueue(1, static_cast<void(*)()>([](){std::cout << "foo" << std::endl;})); // or enqueue(1, +[](){std::cout << "foo" << std::endl;}); 但是您可能不应该在源文件中包含模板定义。您可以使用重载来做到这一点: // interface.hpp void enqueue(uint32_t service_id, void f()); //other functions... // interface.cpp namespace { template <class F, class... Args, std::enable_if_t<is_static_task_v<F, Args...>, void>*> void enqueue_impl(uint32_t service_id, F&& f, Args&&... args) { //... } } // All your explicit instantiations replaced with overload that // just calls the above template void enqueue(uint32_t service_id, void f()) { enqueue_impl(service_id, f); } 或者只是将 interface.cpp 的内容移至头文件(有些人使用 .tpp/.ipp“模板/实现”文件或 .inc 文件来执行此操作。普通的 .hpp 文件就可以正常工作)也)

回答 1 投票 0

CLion Cmake mysql.h 误解

我是 C++ 开发新手。 我想尝试使用 MySQL 数据库,但不明白它出了什么问题。这是我的代码: #包括 #包括 MYSQL*

回答 1 投票 0

C++如何生成函数重载的所有排列?

假设我有课程日期和课程年月日。 结构日期{ 日期(年、月、日) : d(日), m(月), y(年) {}; 日期(月、日、年) : d(日)...

回答 2 投票 0

如何使用 static const 变量初始化 static std::array ?

如何初始化使用 static const 变量作为大小的 static std:array ?我尝试搜索类似的问题,但 std::array 相对较新,因此没有太多可找到的问题。 // 示例类.h

回答 2 投票 0

C++ 模板字符串连接

我正在尝试定义一些可变参数模板,如下所示: typedef const char CCTYPE[]; 模板 struct StringConcat { ... }; 这样我就可以写出这样的东西: char foo[] ...

回答 5 投票 0

C++11 中 std::mem_fun 和 lambda 有什么区别?

对于这个小代码: #包括 #包括 #包括 #包括 #包括 使用命名空间 std; 无效 do_work(int id) { 合作...

回答 1 投票 0

复制虚拟基类会导致丢失shared_ptr拥有的对象

同事给我看了这个程序: #包括 #包括 结构体A { std::shared_ptr u{ 新 int }; }; 结构体B:虚拟A{}; 结构 C :虚拟...

回答 1 投票 0

clang osx March=native 大约是未优化的 1/3 速度

我有一个速度至关重要的项目,因此正在尝试使用编译器标志来尝试获得一些免费性能。我有两个相同的版本,除了附加标志 March=n...

回答 3 投票 0

如果 C++11 中存在 `std::initializer_list` ctor,如何使用默认成员初始值设定项?

考虑以下代码: #包括 结构体A { A(整数,整数){ std::cout << "A::A(int, int)\n"; } A(std::initializer_list) { ...

回答 1 投票 0

为什么 Visual Studio Code 告诉我 cout 不是 std 命名空间的成员?

我正在尝试设置 Visual Studio 代码以用 C++ 进行编程。我已经安装了扩展 C/C++ 和 C/C++ Intellisense 以下是我的代码: #包括 使用命名空间 std;...

回答 11 投票 0

OS X 10.8 上的 CMAKE、Clang 和 C++v11

OS X 1.8 CMAKE 2.8.9 铿锵$铿锵-v Apple clang 版本 4.0 (tags/Apple/clang-421.10.60)(基于 LLVM 3.1svn) 目标:x86_64-apple-darwin12.0.0 线程模型:posix CMAKELists.txt:

回答 1 投票 0

C++26 中的 `std::function` 是否已被 `std::copyable_function` 弃用?

C++26 提供了 std::copyable_function [cppref 链接]。但是,现有的 std::function 已经是可复制的。所以,我有3个问题: std::copyable_function 相对于 std::

回答 1 投票 0

将 C++ 嵌套类分离到它们自己的头文件中

这个网站也是C++新手,但希望看到大家的一些指导。 我有一个非常有趣的项目想法来学习 C++,通过 API、类、参考资料等进行更深入的挖掘,目前我有一个

回答 2 投票 0

关于运算符重载的澄清

为了提供上下文,我有一个可执行文件,它依赖于另一个提供 Identifier 类实现的 Foo 库,现在我的可执行文件中的模块类需要缓存键合的 Foo 对象

回答 1 投票 0

删除字符串流中的最后一个字符?

例如,字符串流包含“abc “,我想删除最后一个字符' '。 我知道可以先使用“str”来完成。 但是如果没有 stringstream::str() 可以完成吗?

回答 2 投票 0

优化问题

我正在开发一个控制器程序,用于运行人形儿童机器人。操作系统是debian 6,整个程序是用C++11编写的。 CPU是1GHz VorteX86 SD,其架构是Intel i486。 ...

回答 2 投票 0

<< operator overloading in C++ for logging purposes

我有一个 C++ 类,在其中放置了许多 std::cout 语句来打印有关该类正在处理的大量信号的信息文本消息。我的目的是重定向这些短信......

回答 2 投票 0

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.