【问题标题】:Class Conversion outside of class declaration类声明之外的类转换
【发布时间】:2015-02-18 03:58:08
【问题描述】:

我希望是个简单的问题。

是否可以在任一类之外定义类转换(等号运算符)?

这源于我的库中的一个类似“api”的层。所以我可以根据底层库编译选择代码。

例子:

foo.hpp(这是我的来源)

class foo
{
}

bar.hpp(这不是我的来源)

class bar
{
}

conversions.hpp(这个文件根据链接的低层改变)

bar operator=(const foo& other)
{
}

该运算符将引发编译器错误,因为它位于静态上下文中,应在类声明中声明。这不是一个真正的选择,因为该栏类可以更改。

【问题讨论】:

    标签: c++ type-conversion operator-keyword


    【解决方案1】:

    可以在foo中定义隐式转换操作:

    class foo
    {
     public:
     operator bar() const
     {
      //make bar from this foo
     }
    };
    

    您现在可以执行以下操作:

    bar b = foo();//b gets copy-initialized using the implicit conversion above
    b = foo();//Since bar doesn't have an operator=(const foo&), standard conversions would apply. The user-defined foo to bar conversion kicks in followed by a bar copy/move.
    

    【讨论】:

    • 这个问题是 bar 类可以根据编译代码的平台而改变。例如,让我们说在 linux 上有 bar,但在 windows 上有 bar2。我试图避免条件编译,例如使用#ifdef LINUX。我计划使用不同的 makefile 规则来编译某些依赖于平台或仅依赖于库的源代码。
    • 让我们假设对operator= 作为非静态成员的限制已被删除。这如何帮助您避免条件编译?
    猜你喜欢
    • 1970-01-01
    • 2016-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多