Boost :: python Отображение функций C ++ с использованием и возвращение шаблонов

Мне нужно создать привязки Python для базы кода C ++. Использую boost :: python, и я столкнулся с проблемами, пытаясь открыть классы, содержащие функции, использующие и возвращающие шаблоны. Вот типичный пример

class Foo 
{ 
    public: 
        Foo(); 
        template Foo& setValue(
            const string& propertyName, const T& value); 
        template const T& getValue(
            const string& propertyName); 
}; 

Типичные T - это строка, двойное число, вектор.

Прочитав документацию , я попытался использовать тонкие оболочки для каждого используемого типа. Вот оболочки для строковых и двойных и соответствующее объявление класса.

Foo & (Foo::*setValueDouble)(const std::string&,const double &) = 
    &Foo::setValue; 
const double & (Foo::*getValueDouble)(const std::string&) = 
    &Foo::getValue;

Foo & (Foo::*setValueString)(const std::string&,const std::string &) = 
    &Foo::setValue; 
const std::string & (Foo::*getValueString)(const std::string&) = 
    &Foo::getValue;

class_("Foo") 
    .def("setValue",setValueDouble, 
        return_value_policy()) 
    .def("getValue",getValueDouble,
        return_value_policy()) 
    .def("getValue",getValueString, 
        return_value_policy()) 
    .def("setValue",setValueString, 
        return_value_policy());

Он компилируется нормально, но когда я пытаюсь использовать привязки python, я получаю исключение C ++.

>>> f = Foo()  
>>> f.setValue("key",1.0) 
>>> f.getValue("key") 
Traceback (most recent call last): 
  File "", line 1, in ? 
  RuntimeError: unidentifiable C++ exception

Интересно, когда я выставляю Foo только для двойных или строковых значение, т.е.

class_("Foo") 
    .def("getValue",getValueString, 
        return_value_policy()) 
    .def("setValue",setValueString, 
        return_value_policy());

Работает нормально. Я что-то упустил?

9
задан Puppy 30 January 2011 в 18:46
поделиться