小编use*_*009的帖子

在std :: string中使用自定义分配器来重用已经分配的char缓冲区

我需要在std :: string对象中使用已经分配的char*缓冲区(带有字符串内容).经过一些研究后,我发现这几乎是不可能的,std :: string总是拥有自己的私有数据副本.我能想到的唯一剩下的方法就是使用一个自定义分配器来返回已经分配的char缓冲区的地址.为了实现这一点,std :: string应该只使用allocator来分配内存来保存其字符串数据,而不是其他任何内容.是这样的吗?

c++ memory-management stdstring

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

在C++ 11中将char*转换为bool时强制执行类型安全性

以下代码编译正常,没有任何警告(使用g ++的默认选项).在这种情况下,是否有一个标志可以用来让g ++发出警告?

void foo(bool v) {
}

void bar() {
  foo("test");
}
Run Code Online (Sandbox Code Playgroud)

c++ gcc gcc-warning implicit-conversion c++11

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

从一种模板实例化转换为另一种模板实例化

我有一个固定大小的字符串类,定义如下:

template <typename const std::size_t max_size>
class fixed_string {
...
};
Run Code Online (Sandbox Code Playgroud)

此类保留一个字符缓冲区来保存字符的 max_size。

我希望能够将此类的对象传递给采用模板实例化的方法,该模板实例化具有较低的 max_size 模板参数值,而无需进行任何复制。因此,例如以下方法:

void foo(const fixed_string<50>& val) {
}
Run Code Online (Sandbox Code Playgroud)

应该可以使用 fixed_string<100> 调用,以便以下操作:

void bar() {
 fixed_string<100> s = "gg";
 foo(s); 
}
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做?

template-meta-programming c++11

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

如何使用 cython 将 python 类公开给 C++

如何使用 cython 将 python 对象暴露给 C++?我了解如何为函数完成它,但不确定这对于一个类是否可行。

本质上,我有一个用 cython 编写的数据结构,它必须由 C++ 填充。填充后,c++ 代码将调用 cython 方法并传递该对象。该方法中的 cython 代码应该能够访问对象的数据。

c++ python cython

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

将std :: string删除它在析构函数中通过assign方法获取的内容

假设我有一个从自定义内存池分配的char*并填充了必要的数据.我在std :: string类的assign方法中使用了char*,并确保使用std :: move调用move varient.

void DoWork(char* my_pool_allocated_buffer) {
    std::string s;
    s.assign(std::move(my_pool_allocated_buffer));
    //do some work with s
}
Run Code Online (Sandbox Code Playgroud)

我有两个问题.

  1. 在方法结束时,std :: string析构函数是否会尝试删除通过assign获取的my_pool_allocated_buffer?文档说它只会删除它通过自己的分配器分配的内存.
  2. 方法退出后,my_pool_allocated_buffer将被其池释放.使用std :: move对此有什么影响吗?(假设池不关心缓冲区持有的实际数据).

c++ move stdstring c++11

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