Moreover, starting with C++11 you have a function called std::mem_fn that allows to alias member functions. See the following example:
struct A {
void f(int i) {
std::cout << "Argument: " << i << '\n';
}
};
A a;
auto greet = std::mem_fn(&A::f); // alias to member function
// prints "Argument: 5"
greet(a, 5); // you should provide an object each time you use this alias
// if you want to bind an object permanently use `std::bind`
greet_a = std::bind(greet, a, std::placeholders::_1);
greet_a(3); // equivalent to greet(a, 3) => a.f(3);
namespace deep {
namespace naming {
namespace convention {
void myFunction(int a, char b) {}
}
}
}
int main(void){
// A pain to write it all out every time
deep::naming::convention::myFunction(5, 'c');
// Using keyword can be done this way
using deep::naming::convention::myFunction;
myFunction(5, 'c'); // Same as above
}
这样做还有一个优点,即它被限制在一个范围内,尽管您总是可以在文件的顶层使用它。我经常在 cout和 endl中使用它,所以我不需要在一个文件的顶部引入所有的 std和经典的 using namespace std;,但是如果你经常在一个文件或函数中使用类似于 std::this_thread::sleep_for()的东西,但是不是在所有地方,也不是在名称空间中的任何其他函数中使用它,那么它也很有用。像往常一样,不鼓励使用它。H 文件,否则将污染全局命名空间。