Generics 访问泛型成员变量会引发编译错误
我有C++/CLI代码,看起来像: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
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调用。我是否遵循使用泛型的正确方法,还是应该