在C++中,是否可以为函数标识符或可调用函数重载""_something运算符以使其具有自定义行为?
最近我在中看到了类似的东西,演示者正在展示如何使用模块、零宏构建单元测试框架.但是,我不太清楚""_test是如何可能的,或者C++是如何理解可调用的应该执行在操作符重载实现的主体中定义的这样一个操作。
template <typename T>
auto "some_name"_test(T a, T b);
有人能解释一下背后的细节吗?
在C++中,我可以通过执行以下操作来更改特定类的运算符:
MyClass::operator==/*Or some other operator such as =, >, etc.*/(Const MyClass rhs) {
/* Do Stuff*/;
}
但是在C中没有类(默认情况下是内置的),那么,我如何才能只对一般函数进行操作符重载呢?
例如,如果我没记错的话,导入stdlib.h会得到->操作符,它只是(*strcut_name).struct_element的语法糖。
那么我如何在C中做到这一点呢?
谢谢。
我有一台以前能用的C++。但是,包含<functional>标头后,编译将失败,并显示以下消息
c:\mingw\lib\gcc\mingw32\9.2.0\include\c++\bits\std_function.h: In static member function 'static void std::_Function_base::_Base_manager<_Functor>::_M_clone(std::_Any_data&, const std::_Any_data&, std::true_type)':
c:\mingw
根据Deitel的“9 9ed C++ How to program”,第444页:
为什么重载的流插入和流提取操作符被重载为非成员函数
重载流插入运算符( << )用于左操作数具有ostream类型的表达式&如cout << classObject。若要以这种方式使用操作符,而右操作数是用户定义类的对象,则必须将其重载为非成员函数。要成为成员函数,操作符<<必须是类ostream的成员。这对于用户定义的类是不可能的,因为我们不允许修改C++标准库类。
问题是<<已经是ostream的成员了。它到底在说什么?我是不是遗漏了什么?