Farz edelim ki, aşağıdaki gibi tanımlanmış iki yükseltme python modülüne sahibim. Modül A:Boost Python'daki çapraz modül bağımlılıkları
class SomeClass {
public:
SomeClass() {}
~SomeClass() {}
};
BOOST_PYTHON_MODULE(A)
{
class_<SomeClass>("SomeClass");
}
ve modül B:
class AnotherClass {
public:
AnotherClass() {}
~AnotherClass() {}
void func(SomeClass& sp) {}
};
BOOST_PYTHON_MODULE(B)
{ class_<AnotherClass>("AnotherClass")
.def("func", &AnotherClass::func)
;
}
Modül B modül A bir bağımlılık (yani, modül A SomeClass
kullanır) sahiptir. Python otomatik modüller arasında sınıfları tercüme etmediğini görünüyor
Traceback (most recent call last):
File "C:\bladiebla\script.py", line 8, in <module>
obj2.func(obj1)
ArgumentError: Python argument types in
AnotherClass.func(AnotherClass, SomeClass)
did not match C++ signature:
func(class AnotherClass {lvalue}, class SomeClass)
:
import A
import B
obj1 = A.SomeClass()
obj2 = B.AnotherClass()
obj2.func(obj1)
aşağıdaki hatayı alıyorum: Şimdi, aşağıdaki python komut dosyası yürütün. Bunu çözmenin bir fikri var mı?
Merhaba, geri bildiriminiz için çok teşekkür ederim. Ancak, bu sorunu miras ilişkisine sahip olmayan iki sınıf için çözmek istiyorum. Örneğin, 'SomeClass' aslında 'Triangle' sınıfı ve 'AnotherClass' sınıfının 'Polygon' sınıfı olduğunu düşünebilirsiniz. Kesinlikle Poligon'un Üçgen'den miras almasını istemiyorum çünkü OO bakış açısından anlam ifade etmiyor. Öyleyse, birbirlerinden miras almayan farklı modüllerdeki iki sınıfı nasıl alabilirim, ama orijinal örneğimde olduğu gibi, Python aracılığıyla birbirimizi kullanıyorlar? – Arjan
'func()' 'SomeClass' argümanını istiyor. Eğer 'AnotherClass' gibi farklı bir şeyden geçmek istiyorsanız, bunu ** yapmadan ** yapabiliyorsunuz. 'AnotherClass', 'SomeClass' dan 'SomeClass' 'a bir argüman olarak bir' AnotherClass 'alan bir kurucu ekleyerek' SomeClass'dan miras alıyor. Alternatif olarak, bir 'AnotherClass' argümanını kabul eden ve' SomeClass' örneğini döndüren bir şey yazabilirsiniz, ancak bunu açıkça belirtmek zorunda kalacaksınız.Eğer böyle bir şey yapamazsan, o zaman sıkışmış olduğunu düşünüyorum - neyse func() neyse ne yapması gerekiyorsa, keyfi bir dersten geçtiğinde bunun hakkında hiçbir şey bilmiyor? – martineau
Evet, bunu anlıyorum, ancak bu işleve farklı bir şey iletmek istemiyorum, sadece bazı türler için bir argüman var. Python betiği örneğinde, benim obj1, A.SomeClass tipindedir. B.AnotherClass ile ilgisi yoktur. B.AnotherClass'daki 'func', obj1 gibi A.SomeClass tipindeki parametreleri kabul etmelidir. – Arjan