有没有一种方法可以将转换运算符添加到基本类型?

例如:

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";
}

现场演示:http://ideone.com/fwija0

没有构造函数:
#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";
}

http://ideone.com/xfsdjp

如果您问“如何使用转换运算符将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";
}

http://ideone.com/wDl4oP

关于c++ - 有没有一种方法可以将转换运算符添加到基本类型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35186919/

10-11 05:00
查看更多