2011-05-28 70 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