有没有办法继续"继承"一个基本类型,如int?

时间:2015-08-05 23:07:21

标签: c++

我有几个类似的结构:

struct Time64 {
    int64_t Milliseconds;

    Time64 operator+(const Time64& right) {
        return Time64(Milliseconds + right.Milliseconds);
    }
    ... blah blah all the arithmetic operators for calculating with Time64 and int64_t which is assumed to represent milliseconds

    std::string Parse() {
        fancy text output
    }
}

现在我需要添加更多它们。基本上它们只是对任何基类的解释并定义所有运算符,因此它们真的很乏味。解释函数(例如"解析"在示例中)很重要,因为我在UI上使用它们。我知道我可以创建解释函数作为像这样的独立东西

std::string InterpretInt64AsTimeString(const Int64_t input) {...}

但是将这些函数称为类方法会产生更好看的代码。

如果只有#34; typedef Int64_t Time64"然后扩展Time64" class"通过添加一些方法..

有没有什么方法可以实现我比现在更容易做到的事情?

2 个答案:

答案 0 :(得分:4)

我想你想要BOOST_STRONG_TYPEDEF。您无法继承int,因为int不是类类型,但您可以这样做:

BOOST_STRONG_TYPEDEF(int64_t, Time64Base);

struct Time64 : Time64Base {
    std::string Parse() { ... }
};

答案 1 :(得分:1)

以下是没有提升的方法:

你需要让你的结构可以隐式转换为底层类型,就像CoffeeandCode所说的那样。这是BOOST_STRONG_TYPEDEF所做的重要部分。

struct Time64 {
    int64_t Milliseconds;

    operator int64_t &() { return Milliseconds; }
};

int main(){
    Time64 x;

    x.Milliseconds = 0;
    x++;

    std::cout << x << std::endl;
}

这通常是一种危险的方法。如果某些东西可以隐式转换为整数,它通常会被错误地用作指针,或者可能不清楚传递给printf()或cout时它会做什么。