2015-08-17 31 views
0

我有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; 
    } 

Type1Type2没有任何共同之处,所以我没有保存在Type什么来实现。它只是为了泛型语法的目的,我创建了Type

当我尝试使用Type1Type2,其成员a & b不能访问调用TestFunction。编译器说,ab不是Type的成员。编译器说,ab不是Type的成员。

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

回答

3
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); }; 
}; 

实际上只需要二传手,我认为你在练习时需要吸气。如何在继承接口的类中实现接口是需要考虑的事情,我无法做出合理的猜测。

+0

我得到了你的答案,但仍然没有解决我的问题。让我提出我的要求:我有2个结构没有任何共同之处,这些结构将用于泛型函数(作为泛型参数),并且将由C#客户端调用。我是否遵循使用泛型的正确方法,或者我应该避免泛型寻找其他类型的解决方案,比如声明单独的API? – Nipun

+0

这听起来确实听起来不像你有一个使它通用的镜头。 –