- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在为现有的 C++ 库编写包装器,该库使用列表,其中 T 是自定义结构。我被建议使用 vector 而不是列表,但我试图避免修改库。
为了更好地理解这个场景,我做了一个简单的应用程序,使用一个列表作为代理来注册一个到 python 的转换(只读就可以)。
我当前的实现编译正常,python 导入正常,可以创建对象,但是当我调用数据成员时,它出错。
python shell 输出:
In [1]: import my_list
In [2]: x = my_list.Bob()
In [3]: x.foos
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
in ()
----> 1 x.foos
TypeError: No Python class registered for C++ class std::list >
C++ 文件:
#include
#include
#include
#ifndef FOREACH
#define FOREACH BOOST_FOREACH
#kết thúc nếu
sử dụng không gian tên std;
using namespace boost::python;
template
struct list_to_list
{
static PyObject* convert(const std::list& src)
{
boost::python::list result;
FOREACH (const T& val, src)
{
result.append(val);
}
return incref(result.ptr());
}
};
struct Bob
{
std::list foos;
};
BOOST_PYTHON_MODULE(my_list)
{
using namespace boost::python;
to_python_converter<>, list_to_list >();
class_("Bob")
.def_readonly("foos", &Bob::foos)
;
}
我错过了什么吗?
1 Câu trả lời
giống FAQ 中所述,通过 def_readonly()
,def_readwrite()
Và add_property()
使用默认策略公开的属性将不会使用自定义转换器。要解决此问题,请将 def_readonly()
Và def_readwrite()
替换为 add_property()
,提供 boost::python::return_value_policy
类型为 boost::python::return_by_value
.
在原始代码中,它将是:
BOOST_PYTHON_MODULE(my_list)
{
using namespace boost::python;
to_python_converter<>, list_to_list >();
class_("Bob")
.add_property("foos", make_getter(&Bob_foos,
return_value_policy()))
;
}
这是一个完整的例子:
#include
#include
#include
#include
namespace python = boost::python;
/// @brief Type to convert from an iterable to a Python list.
template
struct list_to_list
{
static PyObject* convert(const std::list& container)
{
python::list result;
BOOST_FOREACH(const T& value, container)
result.append(value);
return python::incref(result.ptr());
}
};
/// @brief mockup type.
struct Spam
{
Spam()
{
foos = boost::assign::list_of(1)(2)(3)(5);
}
std::list foos;
};
BOOST_PYTHON_MODULE(example)
{
// Enable std::list to Python list conversion.
python::to_python_converter<>, list_to_list >();
python::class_("Spam")
.add_property("foo", python::make_getter(&Spam::foos,
python::return_value_policy()))
;
}
以及由此产生的用法:
>>> import example
>>> spam = example.Spam()
>>> spam.foo
[1, 2, 3, 5]
关于C++ 列表
Như tiêu đề gợi ý, ans_list là danh sách các câu trả lời và ans_index là một con số (chỉ mục của câu trả lời trong từ vựng, nhưng hiện tại điều đó không liên quan). Tree.anslist được tạo ra ở đây là gì? (ví dụ chỉ dành cho lần đầu tiên), bỏ qua các lần lặp lại. nếu
Hiện tại tôi lưu trữ dữ liệu đầu vào của người dùng trong danh sách phân tách bằng dấu phẩy như thế này: Userid | Tùy chọn 1 | 1,2,5 Người dùng đánh dấu một tập hợp các tùy chọn dưới dạng mảng rồi nối chúng bằng dấu phẩy 1,2,5 rồi đến MySQ
Hiện tại tôi lưu trữ dữ liệu đầu vào của người dùng trong danh sách phân tách bằng dấu phẩy như thế này: Userid | Tùy chọn 1 | 1,2,5 Người dùng đánh dấu một tập hợp các tùy chọn dưới dạng mảng rồi nối chúng bằng dấu phẩy 1,2,5 rồi đến MySQ
Tôi muốn biết cách làm phẳng hoàn toàn các danh sách và những thứ chứa trong đó. Trong số những giải pháp khác, tôi đã nghĩ ra một giải pháp là có thể trượt một vật có nhiều thành phần và đặt chúng lại, hoặc lấy đi một vật có một thành phần sau khi trượt. Điều này tương tự như Làm thế nào để tôi “làm phẳng
Tôi muốn biết cách làm phẳng hoàn toàn các danh sách và những thứ chứa trong đó. Trong số những giải pháp khác, tôi đã nghĩ ra một giải pháp có thể trượt một vật có nhiều thành phần và đặt chúng lại, hoặc lấy đi một vật có một thành phần sau khi trượt ra. Điều này tương tự như Làm thế nào để tôi “làm phẳng
Câu hỏi này đã có câu trả lời: Chuyển đổi danh sách lồng nhau thành mảng 2 chiều (3 câu trả lời) Đã đóng 7 năm trước. Có phím tắt nào để chuyển đổi List
Tôi gặp vấn đề khi sắp xếp một Danh sách>. Tôi đã tạo một trình so sánh tùy chỉnh trong đó tôi viết mã để sắp xếp dữ liệu. lớp công khai CustomComparator triển khai Comparator
Câu hỏi này đã có câu trả lời: Đã đóng cách đây 10 năm. Có thể trùng lặp: Java Generics: Không thể chuyển đổi List thành List? Tôi chỉ muốn biết tại sao mã java sau đây
Đã cố gắng tìm ra cách LINQy để thực hiện việc này nhưng không tìm ra được cách nào. Tôi có một đối tượng List<> chứa một thuộc tính là danh sách các mã chữ cái được phân tách bằng dấu phẩy: lst[0].codes = "AA,BB,DD" lst[1
Giả sử tôi có các phép gán sau: points = [] point = (1, 2) Tôi sẽ làm thế nào: points += point Nó hoạt động tốt và cho tôi points = [1, 2]. Nhưng nếu tôi làm thế này: điểm
Cách chuyển đổi kiểu List[Task[List[Header]]] thành Task[List[Header]] trong scala. Tôi có một phương thức trả về Task[List[Header]] và gọi do nhiều lần
Làm thế nào để tìm các phần tử của danh sách 2D trong Java? Tôi có một hàm lấy List
Gán List này cho List kia hoạt động tốt. Việc gán List> cho List> không biên dịch được. Mã lớp công khai Main { public static void main(String[] a
Tôi đang viết một phương thức trong Java phải nhận và lặp lại một Danh sách Serializable. Sự khác biệt giữa: public void myMethod(List list) { } và public là gì?
Tôi thấy nhiều người muốn cập nhật một phần lưới/danh sách/cây bằng mvvm, nhưng họ không muốn làm mới toàn bộ danh sách. Đối với bất kỳ ai gặp phải vấn đề này, tôi đã đưa ra ví dụ sau. Hy vọng thông tin này hữu ích với bạn. Câu trả lời hay nhất Đây là một ví dụ đơn giản. Điều quan trọng nhất trong toàn bộ mã là:
Tôi đang viết một trình bao bọc cho một thư viện C++ hiện có sử dụng danh sách, trong đó T là một cấu trúc tùy chỉnh. Tôi được gợi ý sử dụng vector thay vì danh sách, nhưng tôi đang cố gắng tránh việc sửa đổi thư viện. Để hiểu rõ hơn về tình huống này, tôi đã tạo một ứng dụng đơn giản sử dụng danh sách
Có sự khác biệt nào giữa hai khai báo này không? Cảm ơn, câu trả lời tốt nhất là có. Danh sách có thể chứa hỗn hợp các thứ khác nhau đều bắt nguồn từ Base. Danh sách chứa các mục đồng nhất (theo nghĩa là tất cả chúng phải
Có ai có thể giải thích sự khác biệt giữa các loại sau đây một cách chi tiết nhất có thể không? Danh sách Danh sách Danh sách Để tôi nói cụ thể hơn nhé. Khi nào tôi muốn sử dụng // 1 public void CanYouGiveMeAnAnswer(List l
Tôi có một danh sách các cặp, mỗi cặp là một cặp danh sách. Vì vậy, dữ liệu của tôi trông như thế này: mylist = [(['foo', 'bar'], ['bar', 'bar']),(['bar', 'bar'],['bar', '
Có thể là một tiêu đề kỳ quặc, nhưng tôi gặp vấn đề sau: với một danh sách kiểu (a * b) list, tôi muốn tạo một danh sách mới kiểu (a * b list) list. Một ví dụ: Cho một danh sách hãy testL
Tôi là một lập trình viên xuất sắc, rất giỏi!