有没有办法向原始类型添加转换运算符?
例如:
Someclass x = (Someclass)7; //or even implicit casting
我知道可以在 someclass
中创建一个接受 int 的 ctor,但是有没有办法向 int 添加转换运算符?
最佳答案
您的示例代码
SomeClass x = (SomeClass)7;
如果 SomeClass 具有接受 int 的构造函数,则编译:
struct SomeClass {
SomeClass(int) {}
};
int main() {
SomeClass x = (SomeClass)7;
}
如果您希望能够将 SomeClass 转换为整数,则需要运算符 int()
#include <iostream>
class SomeClass {
int m_n;
public:
SomeClass(int n_) : m_n(n_) {}
SomeClass() : m_n(0) {}
operator int () { return m_n; }
};
int main() {
SomeClass x = 7; // The cast is not required.
std::cout << (int)x << "\n";
}
没有构造函数:
#include <iostream>
class SomeClass {
int m_n;
public:
SomeClass() : m_n(123) {}
operator int () { return m_n; }
};
int main() {
SomeClass x;
std::cout << (int)x << "\n";
}
如果您问“如何使用转换运算符将 int 转换为 SomeClass”,最接近的是 operator=
#include <iostream>
class SomeClass {
public:
int m_n;
SomeClass() : m_n(0) {}
SomeClass& operator = (int n) { m_n = n; return *this; }
};
int main() {
SomeClass sc;
std::cout << "sc.m_n = " << sc.m_n << "\n";
sc = 5;
std::cout << "sc.m_n = " << sc.m_n << "\n";
}
关于c++ - 有没有办法向原始类型添加转换运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35186919/