3
考慮以下類聲明:包裝專業C++模板類痛飲
namespace X {
template<class T>
class Foo {
public:
Foo();
virtual ~Foo();
T value() const;
};
template<class T>
class Foo<vector<T>> {
public:
Foo();
virtual ~Foo();
T value(const int) const;
};
}
他們我已經在foo.i文件中的以下聲明
%include "stl.i"
%include "std_string.i"
%include "std_vector.i"
namespace X {
using namespace std;
template<class T>
class Foo {
public:
Foo();
virtual ~Foo();
T value() const;
};
template<class T>
class Foo<vector<T> > {
public:
Foo();
virtual ~Foo();
T value(const int) const;
};
%template(FooInt) Foo<int>;
%template(FooString) Foo<string>;
%template(FooVectorInt) Foo<vector<int> >;
}
兩個階級之間的差異後者對向量容器的專門化和 value()方法的不同簽名,其中第一個不帶任何參數,第二個帶有期望的整數。
包裝代碼由痛飲放在一起wrapps的%template(FooVectorInt)
錯誤的,因爲它調用value()
方法而不是專門的向量方法value(const int)
的。給我下面的編譯錯誤消息:
foo_wrap.cxx: in function »int _wrap_FooVectorInt_value(lua_State*)«:
/home/noobsaibot/foo/bindings/src/lua/foo_wrap.cxx:6706:81: error: no matching function to call »X::Foo<std::vector<int> >::value() const«
/home/noobsaibot/foo/src/foo.h:78:5: note: candidate is: T X::Foo<std::vector<_RealType> >::value(int) const [with T = int, int = unsigned int]
任何建議,以什麼我可能會丟失,使痛飲瞭解哪些功能是正確的?
歡呼
忘記我寫的,我沒有得到一個錯誤。現在開始檢查它是否做它應該做的事情:) ...迄今爲止感謝。 – noobsaibot 2012-03-19 20:41:47
它編譯和我得到「正確的」對象Foo>,但是,類型不知道lua ...渲染對象在lua內不可用:/ ... –
noobsaibot
2012-03-19 21:41:06
@noobsaibot - 你是什麼意思「不知道去盧阿?「它看起來像是在我做的Python測試中正確註冊的。 (我從來沒有在我的生活中使用lua) – Flexo 2012-03-20 15:18:31