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

时间:2015-02-18 03:55:32

标签: 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

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

2 个答案:

答案 0 :(得分: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();
}

<强> Demo

答案 1 :(得分:0)

不是一种非常直接的方法,但可以使用函数指针。

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

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