如何将对象转换为数据类型,比如int / string?以下是一个示例代码:
我希望能够使用integers
和var
添加以下内容
示例var = <expression> + <expression> ; //expression can be int or var
以下是var:
的代码#pragma once
#include <string>
class vars
{
public:
vars(std::string Name):name(Name){value = 0;}
void setValue(int val);
int getValue(void) const;
// std::string getName(void) const;
~vars(void);
private:
std::string name;
int value;
};
这是add的代码:
#pragma once
#include "action.h"
#include "vars.h"
class add: public action
{
public:
add(vars& v, int s1, int s2):target(v),source1(s1),source2(s2){} //downcast the vars to int if needed, how to do so explicitly?
virtual void excute ();
~add(void);
private:
vars& target; //not sure of it
int source1, source2;
};
答案 0 :(得分:1)
如果你有一个只接受一个参数的构造函数(在这种情况下是int
),那么参数的类型可以隐式转换为vars
类型的临时对象。然后,您只需要重载operator+
的{{1}}。
vars
这是直接的解决方案。
最好将只有一个参数的构造函数定义为vars(int a); // Add this constructor
vars & operator+=(const vars other) {
value += other.value; // Or some other operations
return *this;
} // This as memberfuncion inside the vars class
vars operator+(vars left, const vars & right) {
return left += right;
} // This outside the class
,以避免不必要的隐式转换。但如果这是你想要的,你也可以不用它。
您希望获得explicit
(或其他类型)作为结果的另一种情况可以通过重载int
类型来解决。例如:
operator
同样,explicit operator int() { return value; } // Inside class definition
// Which is called like:
vars var("meow");
auto sum = 1 + int(var); // The C-Style
auto sum = 1 + static_cast<int>(var); // The better C++ style
是可选的但是更安全。