我需要在std :: string对象中使用已经分配的char*缓冲区(带有字符串内容).经过一些研究后,我发现这几乎是不可能的,std :: string总是拥有自己的私有数据副本.我能想到的唯一剩下的方法就是使用一个自定义分配器来返回已经分配的char缓冲区的地址.为了实现这一点,std :: string应该只使用allocator来分配内存来保存其字符串数据,而不是其他任何内容.是这样的吗?
以下代码编译正常,没有任何警告(使用g ++的默认选项).在这种情况下,是否有一个标志可以用来让g ++发出警告?
void foo(bool v) {
}
void bar() {
foo("test");
}
Run Code Online (Sandbox Code Playgroud) 我有一个固定大小的字符串类,定义如下:
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)
我怎么能这样做?
如何使用 cython 将 python 对象暴露给 C++?我了解如何为函数完成它,但不确定这对于一个类是否可行。
本质上,我有一个用 cython 编写的数据结构,它必须由 C++ 填充。填充后,c++ 代码将调用 cython 方法并传递该对象。该方法中的 cython 代码应该能够访问对象的数据。
假设我有一个从自定义内存池分配的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)
我有两个问题.