在静态上下文中是否可以重载C++类运算符?例如:
class Class_1{ ... }
int main()
{
Class_1[val]...
}
在静态上下文中是否可以重载C++类运算符?例如:
class Class_1{ ... }
int main()
{
Class_1[val]...
}
如果您想使用内置运算符进行元编程:这是不可能的 - 内置运算符作用于运行时值,而不是编译时值。
您可以使用 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;
}
我不相信这是可能的,虽然我在这方面可能是错的。我想问一下你为什么要这样做呢?也许你只需要在整个应用程序中使用一个实例,而不是对类进行操作?在这种情况下,您应该使用单例模式。
如果您的意思是操作符作用于类,那么不对。这就像说operator +
可以作用于int
或double
一样没有意义。操作符只是函数的语法糖,它们作用于变量(值),而不是类型。
[]
这样的运算符,那么这是有意义的。 - jave.web从C++23开始,可以重载静态operator()
。至于其他运算符:
目前需要实现为非静态成员函数的其他运算符包括所有一元运算符、赋值、下标、转换函数和类成员访问。我们认为声明这些运算符中的任何一个为静态将不会有太多价值,因此我们目前不追求这些。
编译器通过__cpp_static_call_operator
指示对此功能的支持。
Class_1[val]
应该返回一个类型吗?比如你期望执行Class_1[val] v;
吗? - Johannes Schaub - litbstd::type_id
),我想不到任何可以静态重载的运算符。我建议,与其询问您的实现想法在C++中是否可行,不如提出这个想法旨在解决的实际问题。也许有人能够建议一个可行的实现方案。 - sbi