Generics 访问泛型成员变量会引发编译错误

Generics 访问泛型成员变量会引发编译错误,generics,c++-cli,managed-c++,Generics,C++ Cli,Managed C++,我有C++/CLI代码,看起来像: interface class Type { }; public ref class Type1 : Type { public: double a; }; public ref class Type2 : Type { public: double b; }; generic <typename T> where T:Type array<T>^ TestCla

我有C++/CLI代码,看起来像:

  interface class Type
  {

  };
  public ref class Type1 : Type
  {
  public:
    double a;
  };

  public ref class Type2 : Type
  {
  public:
    double b;
  };

  generic <typename T> where T:Type
  array<T>^ TestClass::TestFunction()
  {
    array<T>^ result = gcnew array<T>(1);
    result[0].b = 10.0;
    return result;
  }
接口类类型
{
};
公共引用类Type1:类型
{
公众:
双a;
};
公共引用类Type2:类型
{
公众:
双b;
};
泛型,其中T:Type
数组^TestClass::TestFunction()
{
数组^result=gcnew数组(1);
结果[0],b=10.0;
返回结果;
}
Type1
Type2
没有共同点,所以我没有在
Type
中保留任何东西来实现。它只是为了泛型语法的目的,我创建了
Type

当我尝试使用
Type1
Type2
调用
TestFunction
时,无法访问其成员
a
b
。 编译器说,
a
b
不是
类型的成员

你能告诉我我在这里做错了什么吗

    resultBuffer[0].b = 10.0;
最好是在编程编辑器中编写代码,而不是在SO问题框中编写代码。您只是在添加混淆,这至少需要是
result[0]->b=10.0。但真正的问题肯定是它根本不是泛型代码。如前所述,只有将其作为模板而不是泛型编写,然后将其与Type2一起用作模板参数,它才能工作。这也没有用

.NET泛型要求您约束类型参数,使其始终具有
b
属性,以便始终可以在运行时为任何T生成该方法。因此,您的接口必须如下所示:

interface class IType
{
    property double b { double get(); void set(double); };
};
实际上只需要setter,我想在实践中需要getter。您需要考虑如何在继承接口的类中实现接口,我无法做出合理的猜测

最好是在编程编辑器中编写代码,而不是在SO问题框中编写代码。您只是在添加混淆,这至少需要是
result[0]->b=10.0。但真正的问题肯定是它根本不是泛型代码。如前所述,只有将其作为模板而不是泛型编写,然后将其与Type2一起用作模板参数,它才能工作。这也没有用

.NET泛型要求您约束类型参数,使其始终具有
b
属性,以便始终可以在运行时为任何T生成该方法。因此,您的接口必须如下所示:

interface class IType
{
    property double b { double get(); void set(double); };
};
实际上只需要setter,我想在实践中需要getter。您需要考虑如何在继承接口的类中实现接口,我无法做出合理的猜测

最好是在编程编辑器中编写代码,而不是在SO问题框中编写代码。您只是在添加混淆,这至少需要是
result[0]->b=10.0。但真正的问题肯定是它根本不是泛型代码。如前所述,只有将其作为模板而不是泛型编写,然后将其与Type2一起用作模板参数,它才能工作。这也没有用

.NET泛型要求您约束类型参数,使其始终具有
b
属性,以便始终可以在运行时为任何T生成该方法。因此,您的接口必须如下所示:

interface class IType
{
    property double b { double get(); void set(double); };
};
实际上只需要setter,我想在实践中需要getter。您需要考虑如何在继承接口的类中实现接口,我无法做出合理的猜测

最好是在编程编辑器中编写代码,而不是在SO问题框中编写代码。您只是在添加混淆,这至少需要是
result[0]->b=10.0。但真正的问题肯定是它根本不是泛型代码。如前所述,只有将其作为模板而不是泛型编写,然后将其与Type2一起用作模板参数,它才能工作。这也没有用

.NET泛型要求您约束类型参数,使其始终具有
b
属性,以便始终可以在运行时为任何T生成该方法。因此,您的接口必须如下所示:

interface class IType
{
    property double b { double get(); void set(double); };
};

实际上只需要setter,我想在实践中需要getter。您需要考虑如何在继承接口的类中实现接口,我无法做出合理的猜测。

我得到了您的答案,但我的问题仍然没有解决。让我提出我的要求:我有两个没有共同点的结构,它们将在泛型函数中使用(作为泛型参数),并将由C#client调用。我是否遵循使用泛型的正确方法,还是应该避免使用泛型?寻找任何其他类型的解决方案,如声明单独的API?听起来你似乎没有机会将其泛型化。我得到了你的答案,但我的问题仍然没有解决。让我提出我的要求:我有两个没有共同点的结构,它们将在泛型函数中使用(作为泛型参数),并将由C#client调用。我是否遵循使用泛型的正确方法,还是应该避免使用泛型?寻找任何其他类型的解决方案,如声明单独的API?听起来你似乎没有机会将其泛型化。我得到了你的答案,但我的问题仍然没有解决。让我提出我的要求:我有两个没有共同点的结构,它们将在泛型函数中使用(作为泛型参数),并将由C#client调用。我是否遵循使用泛型的正确方法,还是应该避免使用泛型?寻找任何其他类型的解决方案,如声明单独的API?听起来你似乎没有机会将其泛型化。我得到了你的答案,但我的问题仍然没有解决。让我提出我的要求:我有两个没有共同点的结构,它们将在泛型函数中使用(作为泛型参数),并将由C#client调用。我是否遵循使用泛型的正确方法,还是应该