【发布时间】:2020-12-28 12:20:10
【问题描述】:
更新:
根据 Ryan Shepherd 的回复,我将代码更改为:
class DerivedClass : winrt::implements<DerivedClass, BaseClass> {
public:
DerivedClass(winrt::FrameworkElement& control) :
5===>implements_type(control) {}
static winrt::com_ptr<DerivedClass> from(winrt::FrameworkElement control) {
control ? control.Tag().try_as<SvgCanvasController>() : nullptr;
}
}
现在我得到一个错误:
没有构造函数实例 "winrt::implements
::implements [with D=DerivedClass, I=BaseClass]" 匹配参数列表参数类型是:(winrt::Windows:: UI::Xaml::FrameworkElement)。
我确实定义了 BaseClass 构造函数,它接受 &FrameworkElement 作为参数。所以我不确定我得到了这个错误。
原创:
我在 C++/CX 中有这个:
ref class DerivedClass sealed : public BaseClass {
public:
explicit DerivedClass(Windows::UI::Xaml::FrameworkElement^ &control)
: BaseClass(control) {}
static DerivedClass from(Windows::UI::Xaml::FrameworkElement^ control) {
return control ? dynamic_cast<DerivedClass>(control->Tag) : nullptr;
}
}
当我尝试将其转换为 c++/winrt 时
class DerivedClass : winrt::implements<DerivedClass, BaseClass> {
public:
1===>DerivedClass(winrt::FrameworkElement& control) : BaseClass(control)
2===>{
}
static DerivedClass from(winrt::FrameworkElement control) {
if (control)
3===> return control.Tag().try_as<SvgCanvasController>();
else
4===> return nullptr;
}
这里有几个问题我想讨论和理解。如上所述,我收到以下错误:
1
BaseClass 不是 DerivedClass 类的非静态数据成员或基类
2
winrt::implements的默认构造函数
不能被引用——它是一个被删除的函数
3
没有合适的用户定义从 winrt::impl::com_ref
到 DerivedClass 的转换
4
不存在从 std::nullptr_t 转换为 DerivedClass 的合适构造函数
希望对这些错误有一些想法。
我知道我创建了一个 DerivedClass 对象
auto obj = winrt::make<DerivedClass>();
问题:
- 如何正确编写构造函数?
- 如何像在 C++/CX 中那样将参数传递给基类构造函数?
- 如何处理 from() 函数定义中的错误。
【问题讨论】:
-
驱动
class时的默认访问修饰符是private。要么将其设为struct,要么指定您要驾驶publicly。
标签: uwp uwp-xaml c++-cx c++-winrt cppwinrt