有没有办法在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;
中),但这并不令人满意,因为对于每个函数我希望能够使用别名,我需要为该函数创建一个单独的变量,或者在全局/静态范围内使别名变量可用。
答案 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();
;