2011-05-28 78 views
1

我有templated functionconnect导出模板功能

template<class InstanceClass> 
CL_Slot connect (InstanceClass *instance, void(InstanceClass::*function)(Param1, Param2)) 

它连接了一些信号从InstanceClass传递功能。

在我的例子中,我想连接键盘事件的一些类(KeyDown)。 在C++我写:

get_signal_object().connect(&SomeClass::func); 

但我不得不使用Python的脚本这个功能用(使用Boost.Python的)从C++代码出口。

据我所知,要导出模板,我必须导出它传递任何使用的类型。但在python中,我会传递仅存在于python命名空间中的类。

那么,任何想法如何使用python模板化该功能?

回答

1

你为什么不只是添加

extern template<> 
    CL_Slot connect<SomeClass> (SomeClass *instance, void(InstanceClass::*function)(Param1, Param2)); 

注:EXTERN可能需要template<>后 - 不记得

如果你必须有C链接添加一个包装函数(它将内联模板化功能)。


注:MSVC有nonstandard template export facilities

的C++ 0x拥有的extern模板即将推出的支持:http://en.wikipedia.org/wiki/C%2B%2B0x#Extern_template

+0

你不明白。看:我不知道我将从C++传入该函数的类型!所以,我不知道如何内联它,因为我没有类型。 – Ockonal 2011-05-28 18:14:14

+0

extern从C++中删除0x – 2011-05-28 19:11:03

+0

也许我理解,但回答比您认为的'_correct_'更笼统。那么你需要什么,是在答案的第二部分。我不确定boost.python是否已经支持它 – sehe 2011-05-28 19:12:26