为静态成员函数使用别名?
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();
}
不是很直接的方法,但是可以使用函数指针。
void (*baz)() = Foo::bar; //Does not compile
现在您只需为 Foo::bar 调用 baz();
;
有没有办法在 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();
}
不是很直接的方法,但是可以使用函数指针。
void (*baz)() = Foo::bar; //Does not compile
现在您只需为 Foo::bar 调用 baz();
;