对非托管c ++的目标c属性

时间:2011-11-21 09:52:42

标签: c++ objective-c properties

如何从目标c

转换为非托管c ++

1

property ( nonatomic, assign, getter = isCanceled ) BOOL canceled; 

顺便说一下 - isCanceled = false;所以为什么不怀疑

property ( nonatomic, assign) BOOL canceled; 

与其他运营商的代码的另一部分一样:

2

property ( nonatomic, retain ) Im* img;

这个结构在c ++中是不变的吗?

3

property(nonatomic,readonly)参数* firstPar; 这在c ++中就像变量

const Parameter* firstPar;

以及如何正确翻译第一和第二个属性???

1 个答案:

答案 0 :(得分:0)

对于第一个,在C ++中它可能如下所示:

class MyClass
{
    bool m_cancelled;

public:
    bool isCancelled()
    {
        return m_cancelled;
    }

    void setCancelled(bool b)
    {
        m_cancelled = b;
    }
};

或者,我发现实现访问器方法的大多数C ++类通常使用getXyzsetXyz()命名约定,这与仅xyz的典型Objective-C约定完全不同和setXyz:,因此命名isCancelled()方法getCancelled()可能更有意义。

对于指针类型,它可能会变得棘手。没有单独的内存所有权模型,就像Cocoa一样,所以很难准确地翻译retain属性应该做什么,但在C ++中有一些叫做smart pointers的漂亮的小东西。了解智能指针以及哪种类型的智能指针对您的其他数据/类类型有用。例如,您可能会发现boost::shared_ptr有用。

C ++中的只读属性可能如下所示:

class MyClass
{
    int m_someProp;

public:
    int getSomeProp()
    {
        return m_someProp;
    }

    MyClass(int initialValue) : m_someProp(initialValue)
    {
        // m_someProp can still be altered anywhere within any method within
        // MyClass, but users of MyClass will only have access to the value
        // via getSomeProp()
    }
}