为静态成员函数使用别名?

using alias for static member functions?

有没有办法在 C++ 中为静态成员函数起别名?我希望能够将它拉入范围,这样我就不需要完全限定名称。

基本上是这样的:

struct Foo {
  static void bar() {}
};

using baz = Foo::bar; //Does not compile

void test() { baz(); } //Goal is that this should compile

我的第一个想法是使用 std::bind(如 auto baz = std::bind(Foo::bar);)或函数指针(如 auto baz = Foo::bar;),但这并不令人满意,因为对于每个函数我都想成为能够在其中使用别名,我需要为该函数创建一个单独的变量,或者让别名变量在 global/static 范围内可用。

using 不是这里的正确工具。只需使用 auto baz = &Foo::bar.

声明您的别名(如果需要,则为全局别名)

如评论中所建议,您还可以constexpr使其在可能的情况下在常量表达式的编译时可用。

struct Foo {
  static void bar() { std::cout << "bar\n"; }
};

constexpr auto baz = &Foo::bar; 

void test() { baz(); }

int main() 
{
    test();
}

Demo

不是很直接的方法,但是可以使用函数指针。

void (*baz)()  = Foo::bar; //Does not compile

现在您只需为 Foo::bar 调用 baz();