有没有办法将转换运算符添加到原始类型?
Is there a way to add conversion operators to primitive types?
有没有办法将转换运算符添加到原始类型?
例如:
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 转换为整数,你需要 operator 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";
}
如果你问 "how can I convert int to SomeClass with a conversion operator" 最接近的是 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";
}
不,那是不可能的。您不能更改原始(内置)类型的操作。
有没有办法将转换运算符添加到原始类型?
例如:
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 转换为整数,你需要 operator 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";
}
如果你问 "how can I convert int to SomeClass with a conversion operator" 最接近的是 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";
}
不,那是不可能的。您不能更改原始(内置)类型的操作。