我有几个类似的结构:
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"通过添加一些方法..
有没有什么方法可以实现我比现在更容易做到的事情?
答案 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时它会做什么。