C++静态运算符重载

vof42yt1  于 2023-05-20  发布在  其他
关注(0)|答案(5)|浏览(138)

在静态上下文中是否可以重载C++类操作符?例如

class Class_1{ ... }
int main()
{

    Class_1[val]...

}
0yg35tkg

0yg35tkg1#

从C++23开始,可以重载static operator()。对于其他运营商:
目前还有其他操作符需要实现为非静态成员函数-所有一元操作符、赋值、下标、转换函数和类成员访问。我们不认为能够将其中任何一个声明为静态的会有那么大的价值,所以我们现在不追求这些。
编译器通过__cpp_static_call_operator指示支持此功能。

qhhrdooz

qhhrdooz2#

如果您正在寻找使用内置运算符的元编程:这样的事情是不可能的-内置的操作符操作运行时的值,而不是编译时的值。
您可以使用boost::mpl来实现,而不是使用内置的操作符,而是使用它的模板,例如at用于op[]plus<a, b>用于op+等。

int main() {
    using boost::mpl::vector;
    using boost::mpl::at_c;
    using boost::mpl::plus;
    using boost::mpl::int_;

    typedef vector<int, bool, char, float> Class_1;
    typedef vector< int_<1>, int_<2> > Numeric_1;

    at_c<Class_1, 0>::type six = 6;
    typedef plus<at_c<Numeric_1, 0>::type 
                ,at_c<Numeric_1, 1>::type>::type r;
    int i3[r::value] = { 4, 5, 6 };
    return ((i3[0] + i3[1] + i3[2]) * six) == 90;
}
egdjgwm8

egdjgwm83#

我不相信这是可能的,尽管在这方面我可能是错的。我想问你为什么要这么做。也许您只需要在整个应用程序中使用一个示例,而不是在类而不是示例上执行操作?在这种情况下,您可能应该使用the singleton pattern

oymdgrw7

oymdgrw74#

如果你的意思是操作符对一个类进行操作,那么No。这是没有意义的,就像说operator +可以在intdouble上操作一样。运算符是函数的语法糖,它们对变量(值)而不是类型进行操作。

hi3rlvi2

hi3rlvi25#

不可以,操作符不能是类的静态成员。请使用常规静态函数。

相关问题