gpt4 book ai didi

c++ - 在 C++ 中为函数实现提供多个名称

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:36:57 26 4
gpt4 key购买 nike

假设我有一个基本的 2D vector 类,例如

class vector2
{
int x, y;
}

这两个值可用于表示位置以及宽度和高度。 C++ 是否为我提供了一个方法来实现诸如 vector2::getXpos() 之类的函数,然后还定义了 vector2::getWidth() 并让它使用相同的实现.

我知道我可以让这两个函数内联,但编译器可能决定不内联这些函数。因此,如果 getWidth 只是调用了 getXpos,您最终会调用两个函数。

我想用它来做什么的一个更现实的例子是 getLength() 和 erm... getSpan()(想像这里的屏幕当你说 40"电视时)

我假设这将是一个特殊函数定义之类的简单案例...我确实找到了 this page但这听起来像是一个 C 特性……而且要开始工作有点困难。

编辑

我不是在问内联函数的机制......我基本上想做一些功能性的事情

class MyClass
{
void ActaullyDoStuff();
public:
void foo(){ActaullyDoStuff();}
void bar(){ActuallyDoStuff();}
}

但是我可以写类似的东西

class MyBetterClass
{
public:
void foo(){ /* BLOCK OF CODE */ }
void bar(){ /* DO WHAT EVER foo() DOES */ }
}

我希望 bar() 成为执行 foo() 的另一种方式,以便相同的功能代码可以根据情况使用不同的、更合适的名称。

最佳答案

but the compiler might decide to not inline these functions

那么编译器可能有充分的理由这样做。

我认为这不是问题,只需让具有替代名称的函数调用“真实”函数,编译器很可能会将其内联。

编辑:

如果这不能说服您,可以使用 __forceinline在 Visual Studio 。 Here是在 GCC 中强制内联的方式。

编辑2:

class MyBetterClass
{
public:
void foo(){ /* BLOCK OF CODE */ }
__forceinline void bar(){ foo(); /* DO WHAT EVER foo() DOES */ }
}

关于c++ - 在 C++ 中为函数实现提供多个名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4178028/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com