Blame tests/run/curiously_recurring_template_pattern_GH1458.pyx
|
Packit |
562c7a |
# tag: cpp
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
cdef extern from "curiously_recurring_template_pattern_GH1458_suport.h":
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
cdef cppclass Base[T, Derived]:
|
|
Packit |
562c7a |
Base(T)
|
|
Packit |
562c7a |
Derived half()
|
|
Packit |
562c7a |
T calculate()
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
cdef cppclass Square[T](Base[T, Square[T]]):
|
|
Packit |
562c7a |
Square(T)
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
cdef cppclass Cube[T](Base[T, Cube[T]]):
|
|
Packit |
562c7a |
Cube(T)
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def test_derived(int x):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> test_derived(5)
|
|
Packit |
562c7a |
(6.25, 8)
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
try:
|
|
Packit |
562c7a |
square_double = new Square[double](x)
|
|
Packit |
562c7a |
cube_int = new Cube[int](x)
|
|
Packit |
562c7a |
return square_double.half().calculate(), cube_int.half().calculate()
|
|
Packit |
562c7a |
finally:
|
|
Packit |
562c7a |
del square_double, cube_int
|