为什么Visual C ++不接受具有相同名称的通用和非通用接口?

时间:2014-01-25 19:22:04

标签: visual-c++ generics c++-cli

我对同名的通用和非通用接口有问题。

我的代码:

public interface class IPacked {
    // Methods
    void PackFromDouble(double realNumber);
    double ToDouble( );
};

generic<typename T> public interface class IPacked : public IPacked {
    // Property
    property T PackedValue {
        virtual T get( );
        virtual void set(T value);
    }
};

我知道,它可以编译。我的朋友在旧团队项目中使用它。 但是,函数中不存在此问题。

1 个答案:

答案 0 :(得分:3)

由于C ++语言规则,不支持它。从C++/CLI Language Specification,第31.1章:

  

泛型类型不得与任何其他泛型类型,模板,类,委托,函数同名,   对象,枚举,枚举器,命名空间或类型在同一范围内(C ++标准3.3),除了   在C ++标准的14.5.4中规定。除非通用函数可以由非泛型重载   具有相同名称的函数或具有相同名称的其他通用函数,通用名称   在命名空间范围或类范围内声明在该范围内应是唯一的。

C ++标准的第14.5.4章讨论了部分模板特化,没有什么可以帮助你。

作为一种解决方法,您可以考虑在C#程序集中声明接口并添加对它的引用。或者使用不同的命名空间,就像System :: Collections :: IEnumerable vs System :: Collections :: Generic :: IEnumerable&lt;&gt ;.