IPropertySet : IUnknown
{
    __declspec(property(get=GetValue,put=PutValue))
    _variant_t Value[];     //  居然可以这么声明
}IPropertySetPtr prop(CLSID_PropertySet);prop->Value["ReadStyle"] = XXX;    // _variant_t没有重载[]   本类也没有重载[]   这是什么用法
以上是我在某tlh里面看到的一段代码  很是不明白;求解释

解决方案 »

  1.   

    Value只是一个属性,对于属性的读取和赋值,编译器会把代码翻译成GetValue/PutValue方法调用,不同于类成员变量的访问,跟[]的重载无关。你检查一下PutValue有几个参数。
      

  2.   


    感谢  我完全是把C++的概念带到Com来了
      

  3.   

    刚找了一下相关资料  这个好像叫Microsoft Visual C++的“虚拟属性”  纠正我的上一个回复
      

  4.   

    属性就是属性,没有虚拟的概念。虽然COM使用了大量的属性特性,但属性编程跟COM无关,是VC++的特性