首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在cppyy中键入别名参数

在cppyy中键入别名参数
EN

Stack Overflow用户
提问于 2022-08-25 06:15:19
回答 1查看 43关注 0票数 2

我试图在Python代码中使用一些C++库。我遇到的一个问题是,我似乎不能调用以别名类型作为参数的函数。下面是我复制的一个极小的例子:

代码语言:javascript
复制
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)

这给出了输出:

代码语言:javascript
复制
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++经验非常有限。该问题是类型别名还是其他问题?如果是类型转换,我如何解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-25 18:24:53

问题不是别名,只是转换器代码没有期望一个显式的std::initializer_list对象,只有隐式转换。这将起作用:

代码语言:javascript
复制
res = TestClass([TestPair(TestEnum.Bar, 4), TestPair(TestEnum.Foo, 12)])

编辑: cppyy与回购大师,以上现在也工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73482704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档