2016-08-09 3 views
-1

Я хотел бы знать, как бы я использовать подобный код для шаблон < TYPENAME T> в питона, так как он используется в ++ код, например, C:Функциональные шаблоны питона

template <typename T> 
unsigned int counting_bit(unsigned int v){ 
    v = v - ((v >> 1) & (T)~(T)0/3);       // temp 
    v = (v & (T)~(T)0/15*3) + ((v >> 2) & (T)~(T)0/15*3);  // temp 
    v = (v + (v >> 4)) & (T)~(T)0/255*15;      // temp 
    return v; 
} 

Как бы я напечатанный материал объекты с переменной typename в python так же, как упоминается в C++?

+0

Каков ваш код на Python до сих пор? –

+2

Даже с C++, '' '' '' 'шаблона, необходимого для подсчета количества бит? Существует команда 'n & (n - 1)' для подсчета битов с использованием цикла. – iammilind

+0

@VaibhavBajaj Я еще не написал код python, так как я все еще пытаюсь выяснить, как придать тип объектам. –

ответ

2

Просто передайте тип функции.

Например, посмотреть (бесполезную) функция:

def converter(x, required_type): 
    return required_type(x) 

converter('1', int) 
converter('1', float) 
+0

это хорошее решение и помогло мне легко. Я хотел знать погоду, если бы мог передавать типы данных типа ctypes и возвращаться, например, ** c_int(). Value **? –

+0

Вы можете передать и вернуть любой объект python. – cdarke

1

ответ DeepSpace мог быть украшен, чтобы сделать вещи более C++ - как с помощью затворов Python, чтобы сделать что-то вроде следующих для создания функций для конкретных типов по применение шаблона. Он также показывает, как легко в Python получить и использовать тип другой переменной.

def converter_template(typename): 
    def converter(v): 
     t = typename(v) # convert to numeric for multiply 
     return type(v)(t * 2) # value returned converted back to original type 

    return converter 

int_converter = converter_template(int) 
float_converter = converter_template(float) 

print('{!r}'.format(int_converter('21'))) # '42' 
print('{!r}'.format(float_converter('21'))) # '42.0' 
Смежные вопросы