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

Mar*_*ark 3 c++ c++11 c++14

有没有办法在C++中为静态成员函数设置别名?我希望能够将其纳入范围,以便我不需要完全限定名称.

基本上是这样的:

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

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

void test() { baz(); } //Goal is that this should compile
Run Code Online (Sandbox Code Playgroud)

我的第一个想法是使用std::bind(如在auto baz = std::bind(Foo::bar);)或函数指针(如在auto baz = Foo::bar;),但这是不能令人满意的,因为对于我希望能够使用别名的每个函数,我需要为该函数创建一个单独的变量,或者而是在全局/静态范围内使别名变量可用.

qua*_*dev 5

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();
}
Run Code Online (Sandbox Code Playgroud)

演示

  • @Mark是[这个](http://coliru.stacked-crooked.com/a/a973d9d8a871acf7)你在找什么? (2认同)
  • @Mark你可以依赖于全局变量,它们的用法与它们的定义在同一个.cpp文件中 (2认同)