有没有办法将转换运算符添加到原始类型?

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

现场演示: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

如果你问 "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";
}

http://ideone.com/wDl4oP

不,那是不可能的。您不能更改原始(内置)类型的操作。