cython

Форк
0
/
cpp_template_ref_args.pyx 
55 строк · 1.1 Кб
1
# tag: cpp, no-cpp-locals
2

3
from libcpp.vector cimport vector
4

5

6
cdef extern from "cpp_template_ref_args.h":
7

8
    cdef cppclass Bar[T]:
9
        Bar()
10
        # bug: Bar[T] created before class fully defined
11
        T value
12
        Bar[T] & ref() except +
13
        const Bar[T] & const_ref() except +
14
        const Bar[T] & const_ref_const() except +
15

16
    cdef cppclass Foo[T]:
17
        Foo()
18
        int bar_value(Bar[int] & bar)
19

20

21
def test_template_ref_arg(int x):
22
    """
23
    >>> test_template_ref_arg(4)
24
    4
25
    """
26

27
    # Templated reference parameters in method
28
    # of templated classes were not properly coalesced.
29

30
    cdef Foo[size_t] foo
31
    cdef Bar[int] bar
32

33
    bar.value = x
34

35
    return foo.bar_value(bar.ref())
36

37
def test_template_ref_attr(int x):
38
    """
39
    >>> test_template_ref_attr(4)
40
    (4, 4)
41
    """
42
    cdef Bar[int] bar
43
    bar.value = x
44
    return bar.ref().value, bar.const_ref().value
45

46
def test_template_ref_const_attr(int x):
47
    """
48
    >>> test_template_ref_const_attr(4)
49
    4
50
    """
51
    cdef vector[int] v
52
    v.push_back(x)
53
    cdef const vector[int] *configs = &v
54
    cdef int value = configs.at(0)
55
    return value
56

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.