我想知道这个模板业务.
在C和C++中,将声明放在源文件中的头文件和定义中是很常见的,并将两者完全分开.然而,在模板方面,这似乎不可能(以任何好的方式),而且众所周知,模板是一个很好的工具.
此外,Boost主要是标题,所以这是一个真正的问题.在C++中分离标题和源代码仍然是一个好主意,还是我不应该非常依赖模板?
在C++中,我的理解是可以内联虚函数,但通常会忽略内联提示.似乎内联虚函数没有太多意义.
是对的吗?
任何人都可以提供一个内联虚函数好的案例吗?
而objdump我的.o文件的显示,我对同一类两种不同的析构函数.为什么?
Disassembly of section .text._ZN1AD0Ev:
0000000000000000 <_ZN1AD0Ev>:
0: 53 push %rbx
1: be 00 00 00 00 mov $0x0,%esi
6: 48 89 fb mov %rdi,%rbx
9: 48 c7 07 00 00 00 00 movq $0x0,(%rdi)
10: ba 2c 00 00 00 mov $0x2c,%edx
15: bf 00 00 00 00 mov $0x0,%edi
1a: e8 00 00 00 00 callq 1f <_ZN1AD0Ev+0x1f>
1f: 48 89 df mov %rbx,%rdi
22: be 08 00 00 00 mov $0x8,%esi
27: 5b pop %rbx …Run Code Online (Sandbox Code Playgroud) 我已经看到了::std::thread等等的文章::std::forward,但我没有看过任何好文章::std::atomic.当然,还有标准提案文件,但我还没有看到任何想要使用该设施的人的良好文档.
有没有?我在哪里可以找到它?
将其与其他语言区分开来的C++特性之一是能够将复杂对象分配为成员变量或局部变量,而不是总是必须分配它们new.但这导致了在任何给定情况下可以选择哪个问题.
是否有一些很好的标准来选择如何分配变量?我什么时候应该将成员变量声明为直接变量而不是作为引用或指针?什么时候应该分配一个变量new而不是使用在堆栈上分配的局部变量?
我有这个代码,如果你注释掉行注释" 但这不起作用?! "它编译得很好,但如果你没有,编译器会产生错误.
至少,gcc 8.2会产生错误.
但是,它们似乎与我相同.有什么问题?这是合法代码吗?
template <int x>
struct test_template {
static int size() { return x; }
};
constexpr int ce_strlen(char const *s)
{
int i = 0;
while (s[i]) ++i;
return i;
}
int joe()
{
constexpr int plen = ce_strlen(__PRETTY_FUNCTION__); // This works
test_template<plen> a; // This declaration is valid.
test_template<ce_strlen(__PRETTY_FUNCTION__)> b; // But this doesn't work?!
return a.size() + b.size();
}
Run Code Online (Sandbox Code Playgroud)
我试图想出一种在编译时为侵入性分析系统创建配置文件标签的方法.我成功了,但我的最终代码不涉及使用ce_strlen.
我按下内部会发生什么Enter?
除了好奇之外,我的动机是要弄清楚当你发生什么时会发生什么
from sympy import *
Run Code Online (Sandbox Code Playgroud)
并输入一个表达式.它如何从Enter致电
__sympifyit_wrapper(a,b)
Run Code Online (Sandbox Code Playgroud)
在sympy.core.decorators?(这是我尝试检查评估时winpdb带给我的第一个地方.)我猜想有一些内置的eval函数可以正常调用,并且在导入sympy时会被覆盖?
我想生成线程来执行某些任务,并使用线程安全队列与它们进行通信.在我等待的时候,我也想对各种文件描述符做IO.
推荐的方法是什么?我是否必须创建一个线程间管道并在队列从无元素转到某些元素时写入它?有没有更好的方法?
如果我必须创建线程间管道,为什么实现共享队列的更多库不允许您将共享队列和线程间管道创建为单个实体?
我想这样做的事实是否意味着一个基本的设计缺陷?
我问这个关于C++和Python的问题.我对跨平台解决方案略感兴趣,但主要对Linux感兴趣.
更具体的例子......
我有一些代码将搜索文件系统树中的东西.我有几个通过套接字向外界开放的通信渠道.可能(或可能不)导致需要搜索文件系统树中的内容的请求将到达.
我将隔离在一个或多个线程中搜索文件系统树中的东西的代码.我想接受这样的请求,这些请求导致需要搜索树并将它们放入由搜索器线程完成的线程安全队列中.结果将被放入已完成搜索的队列中.
我希望能够在搜索过程中快速为所有非搜索请求提供服务.我希望能够及时对搜索结果采取行动.
处理传入的请求通常意味着使用某种事件驱动的体系结构epoll.磁盘搜索请求队列和结果返回队列意味着一个线程安全队列,它使用互斥锁或信号量来实现线程安全.
等待空队列的标准方法是使用条件变量.但是,如果我需要在等待期间提供其他请求,那将无效.我最终一直在轮询结果队列(并且平均将结果延迟轮询间隔的一半),阻塞而不是服务请求.
在本文中,关于::std::error_code为作者定义自己的扩展,建议使用以下代码:
namespace std
{
template <>
struct is_error_code_enum<http_error>
: public true_type {};
}
Run Code Online (Sandbox Code Playgroud)
为了实现从您自己的错误常量到系统错误类型的转换.
这合理吗?将东西放入std命名空间总是让我感到紧张.有没有更好的方法来实现目标?如果做不到这一点,标准的一部分是否可以做到这一点?
我们即将着手实施一个运行Linux的设备(其中包括)将附加到软件定义的FM/AM无线电,该设备还可以接收描述播放列表和其他此类内容的RDS数据.这是一个相对愚蠢的设备,主要包含一个或两个DSP作为调谐器,否则对信号的处理非常少.
我正在考虑设备的内核驱动程序,然后是用户区硬件抽象层,它提供了标准化的接口,并抽象了RDS数据收到的确切时间的细节,并处理错误处理和所有其他杂乱的东西.是否已经有像这样的用户区层?要么完全避免使用它,要么使我们的东西与已经存在的东西插件兼容将是很好的,所以如果我们想要的话,我们可以使用其他项目用于无线电UI.