小编Dan*_*ook的帖子

typedef和const指针的容器

以下代码行编译得很好并且表现得很好:

list<const int *> int_pointers;  // (1)
Run Code Online (Sandbox Code Playgroud)

以下两行不是:

typedef int * IntPtr;
list<const IntPtr> int_pointers;  // (2)
Run Code Online (Sandbox Code Playgroud)

我得到完全相同的编译错误

list<int * const> int_pointers;  // (3)
Run Code Online (Sandbox Code Playgroud)

我很清楚最后一行不合法,因为STL容器的元素需要可分配.为什么编译器解释(2)与(3)相同?

c++ containers stl typedef

8
推荐指数
4
解决办法
1427
查看次数

使用boost :: bind和构造函数

我正在尝试创建新对象并使用boost :: bind将它们添加到对象列表中.例如.

struct Stuff {int some_member;};
struct Object{
    Object(int n);
};
....
list<Stuff> a;   
list<Object> objs;
....
transform(a.begin(),a.end(),back_inserter(objs), 
  boost::bind(Object,
     boost::bind(&Stuff::some_member,_1)
  )
);
Run Code Online (Sandbox Code Playgroud)

这似乎不起作用.有没有办法使用带有boost :: bind的构造函数,还是应该尝试其他方法?

c++ constructor boost bind

7
推荐指数
2
解决办法
5209
查看次数

AMQP - 消费者是否可以访问路由密钥?

我已经设置了一个主题交换,消费者队列与"#.topic"绑定.我想根据前缀使用不同的确认策略.是否将完整的路由密钥发送给消费者?如果是这样,我该如何访问它?AMQP概念的答案可能就足够了,但涉及rabbitmq-c的答案将是理想的.

c amqp rabbitmq

7
推荐指数
1
解决办法
2186
查看次数

C++声明中的两种或多种数据类型

g++在以下代码中从3.3中得到一个奇怪的错误:

#include <bitset>
#include <string>

using namespace std;

template <int N, int M>
bitset<N> slice_bitset(const bitset<M> &original, size_t start) {
    string str = original.to_string<char, char_traits<char>, allocator<char> >();
    string newstr = str.substr(start, N);
    return bitset<N>(newstr);
}

int main() {
    bitset<128> test;
    bitset<12> result = slice_bitset<12, 128>(test, 0);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

错误如下:

In function `std::bitset slice_bitset(const std::bitset&, unsigned int)':
syntax error before `,' token
`char_traits' specified as declarator-id
two or more data types in declaration of `char_traits'
`allocator' specified as …

c++ templates g++

6
推荐指数
2
解决办法
1万
查看次数

在构建 VSCode 开发容器时使用主机网络

如何在容器构建期间让 VSCode 使用主机网络?在 devcontainer.json 中,我可以设置

"runArgs": ["--network=host"]
Run Code Online (Sandbox Code Playgroud)

但这仅适用于运行容器。如何在容器构建期间让 VSCode 使用主机网络?

docker vscode-remote

6
推荐指数
1
解决办法
825
查看次数

操作包含文件的搜索路径

我的开发环境是这样的,我some_header.h/usr/include/another/directory. /another/directory包含我需要在我的程序包括一些头文件,但我想用some_header.h/usr/include.我用的时候

 gcc ... -I/another/directory
Run Code Online (Sandbox Code Playgroud)

gcc使用/another/directory/some_header.h.如果我使用

 gcc ... -I/usr/include -I/another/directory
Run Code Online (Sandbox Code Playgroud)

gcc做了同样的事情,因为它忽略了,/usr/include因为它是标准搜索路径的一部分,但它在非标准目录包括在之后被搜索-I.

有任何想法吗?

c gcc include

3
推荐指数
2
解决办法
3408
查看次数

Boost :: bind和std :: copy

我正在尝试使用Boost :: bind和std :: copy来打印列表列表中的值.显然,我可以使用循环,为了清晰起见,我最终可能会这样做,但我仍然想知道我在这里做错了什么.

这是我的代码的提炼版本:

#include <boost/bind.hpp>
#include <iterator>
#include <algorithm>
#include <list>
#include <iostream>
using namespace std;
using namespace boost;

int main(int argc, char **argv){
list<int> a;
a.push_back(1);

list< list<int> > a_list;
a_list.push_back(a);

ostream_iterator<int> int_output(cout,"\n");

for_each(a_list.begin(),a_list.end(),
  bind(copy,
    bind<list<int>::iterator>(&list<int>::begin,_1),
    bind<list<int>::iterator>(&list<int>::end,_1),
    ref(int_output)
  ) //compiler error at this line
);
return 0;
Run Code Online (Sandbox Code Playgroud)

}

编译器错误开始

error: no matching function call to bind(<unresolved overloaded function type> .....
Run Code Online (Sandbox Code Playgroud)

我认为这意味着bind无法弄清楚最外层绑定的返回类型应该是什么.我不怪它,因为我也不能.有任何想法吗?

c++ boost bind

3
推荐指数
1
解决办法
1481
查看次数

在信号处理程序中显式调用析构函数

我有一个析构函数执行一些必要的清理(它杀死进程).即使将SIGINT发送到程序,它也需要运行.我的代码目前看起来像:

typedef boost::shared_ptr<PidManager> PidManagerPtr
void PidManager::handler(int sig)
{
  std::cout << "Caught SIGINT\n";
  instance_.~PidManagerPtr();  //PidManager is a singleton
  exit(1);
}
//handler registered in the PidManager constructor
Run Code Online (Sandbox Code Playgroud)

这有效,但似乎有很多警告反对显式调用析构函数.在这种情况下这是正确的做法,还是有"更正确"的方法呢?

c++ destructor signals

3
推荐指数
1
解决办法
2446
查看次数

在Unix上的C语言中,进程如何在不打开文件的情况下告诉它对文件具有哪些权限?

我可以使用stat()来确定所有者,组或其他人拥有的权限,并且我可以使用geteuid()和getpwuid()来获取进程的用户名.我不太确定如何在没有系统调用的情况下获取用户所属的组.

即使知道如何获得群组,整合所有这些信息似乎也需要做很多工作.有没有更简单的方法?

c unix file-permissions

1
推荐指数
1
解决办法
1698
查看次数