我试图在Python代码中使用一些C++库。我遇到的一个问题是,我似乎不能调用以别名类型作为参数的函数。下面是我复制的一个极小的例子:
import cppyy
cppyy.cppdef(
"""
using namespace std;
enum class TestEnum
{
Foo,
Bar
};
using TestDictClass = initializer_list<pair< TestEnum, int>>;
class TestClass {
public:
TestClass(TestDictClass x);
};
"""
)
from cppyy.gbl.std import pair
from cppyy.gbl import TestEnum, TestDictClass, TestClass
TestPair = pair[TestEnum, int]
arg = TestDictClass([TestPair(TestEnum.Bar, 4), TestPair(TestEnum.Foo, 12)])
print("Arg is:")
print(arg)
print("\n")
print("Res is:")
res = TestClass(arg)
print(res)这给出了输出:
Arg is:
<cppyy.gbl.std.initializer_list<std::pair<TestEnum,int> > object at 0x09646008>
Res is:
Traceback (most recent call last):
File ".\scratch\test-alias.py", line 31, in <module>
res = TestClass(arg)
TypeError: none of the 3 overloaded methods succeeded. Full details:
TestClass::TestClass(TestDictClass x) =>
TypeError: could not convert argument 1
TestClass::TestClass(TestClass&&) =>
ValueError: could not convert argument 1 (object is not an rvalue)
TestClass::TestClass(const TestClass&) =>
TypeError: could not convert argument 1请注意,我的C++经验非常有限。该问题是类型别名还是其他问题?如果是类型转换,我如何解决这个问题?
发布于 2022-08-25 18:24:53
问题不是别名,只是转换器代码没有期望一个显式的std::initializer_list对象,只有隐式转换。这将起作用:
res = TestClass([TestPair(TestEnum.Bar, 4), TestPair(TestEnum.Foo, 12)])编辑: cppyy与回购大师,以上现在也工作。
https://stackoverflow.com/questions/73482704
复制相似问题