gpt4 book ai didi

C++/CX 工厂类提供具有相同数量参数的重载构造函数

转载 作者:行者123 更新时间:2023-11-28 02:25:08 25 4
gpt4 key购买 nike

我是 C++/CX、IDL 和 WRL 的新手,遇到了一个问题我不确定是我的代码有错误还是设计的限制。

我有一个 IDL,它定义了一个 IInspectable 接口(interface)及其运行时类,以及一个可以提供自定义构造函数的工厂类。该文件看起来像这样:

interface IFoo;    
runtimeclass Foo;
interface IFooFactory;
[uuid(8543FE719-3F40-987B-BB67-6FD499210BCA), version(0.1), exclusiveto(Foo)]
interface IFooFactory : IInspectable
{
HRESULT CreateInt32Instance([in] __int32 value, [out][retval]Foo **ppFoo);
HRESULT CreateInt64Instance([in] __int64 value, [out][retval]Foo **ppFoo);
}

[uuid(23017380-9876B-40C1-A330-9B6AE1263F5E), version(0.1), exclusiveto(Foo)]
interface IFoo : IInspectable
{
HRESULT GetAsInt32([out][retval] __int32 * value);
HRESULT GetAsInt64([out][retval] __int64 * value);
}

[version(0.1), activatable(0.1), activatable(IFooFactory, 0.1)]
runtimeclass Foo
{
[default] interface IFoo;
}

代码本身很简单,关键部分是在 IFooFactory 的定义中,我有两个函数将被投影到类 Foo 的构造函数中。这两个函数具有相同数量的参数,但类型不同。

当我尝试编译这个 IDL 时,编译器提示说:

在投影构造函数中有多个具有相同数量参数的工厂方法。

我在 Internet 上搜索了很长时间,但找不到任何提到此类问题的内容。在这种情况下是否不允许具有相同数量参数的重载构造函数?如果允许,我该如何修改这个IDL?如果没有,我可以使用任何解决方法吗?

最佳答案

不允许使用相同数量参数的重载构造函数,因为动态类型语言(例如 JavaScript)不知道要使用哪个构造函数。

标准方法是使用命名静态方法。

[uuid(....), version(...), exclusiveto(Foo)]
interface IFooStatics : IInspectable
{
HRESULT FromInt32([in] INT32 value, [out, retval] Foo** result);
HRESULT FromInt64([in] INT64 value, [out, retval] Foo** result);
}

[version(...)]
/* not activatable */
[static(IFooStatics)]
runtimeclass Foo
{
[default] interface IFoo;
}

然后你会说

// C++
Foo^ foo1 = Foo::FromInt32(int32Variable);
Foo^ foo2 = Foo::FromInt64(int64Variable);

// C#
Foo foo1 = Foo.FromInt32(int32Variable);
Foo foo2 = Foo.FromInt64(int64Variable);

// JavaScript
var foo1 = Foo.fromInt32(var1);
var foo2 = Foo.fromInt64(var2);

关于C++/CX 工厂类提供具有相同数量参数的重载构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31016281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com