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