在C ++中创建Typedef

时间:2016-04-21 00:24:51

标签: c++ types typedef

我正在搜索的内容:

您好,所以typedef对我来说是一个新主题,我已经阅读过有关它们的页面。 (http://en.cppreference.com/w/cpp/language/typedef)但这是我能找到的最好的信息,唯一的问题是因为我不知道它是如何工作的,我无法重做并使用它对于我的情况。

另外,对于抬头;我试图创建类似“应用程序”的类型。在C ++中创建CLR表单时编写的类型。 (Visual Studio)唯一的区别是它会被用于其他原因,所以请不要复制代码。

我的代码:

#pragma once

class Application {
public:
    typedef class App;  // Runnable C++ object (TEST PLEASE DON'T JUDGE)

private:
    void Run(App myApp) {   // ERROR: incomplete type is not allowed

    }
};

你如何帮助我:

  • 说明typedef的用途。 (例子可行)
  • 说明我应该创建什么类型的应用程序'类型。 (例如,Class,String,Int等)或以其他方式解释我可以这样做。
  • 您也可以创建一个包含评论解释的示例。

感谢您的帮助!我试图让这个问题真实可以解释和光滑。

2 个答案:

答案 0 :(得分:2)

在C ++中,typedef只是为另一种类型创建别名,因此引用新类型与引用原始类型相同。

// create a alias for the int type
typedef int my_new_type;

// here a and b have the same type
int a = 1;
my_new_type b = 1;

以上是一个人为的例子,通常你使用typedef的类型会更复杂(比如std::vector<std::pair<int, std::string>>)。对于您的用例,我不确定您要查找的是typedef。

答案 1 :(得分:0)

我认为你正在寻找

typedef Application App;

但我不确定你为什么不做

class Application {
private:
    void Run(Application myApp) {

    }
};

至于用法,typedef的一个用途是定义其底层类型可能因构建配置,目标平台和编译器而异的类型。例如,如果您正在编写将在PS4和XBOX One上运行的游戏,您可能会使用两个不同的编译器,具体取决于您正在构建的平台。

    #if defined(MSVC) 
        typedef __int64 TInt64;
    #elif defined(GCC)
        typedef int64_t TInt64;
    #endif

这允许您的更多代码与平台无关并抽象出编译器/平台细节,使应用程序代码更具可读性并封装我们感兴趣的假设。它还减少了代码库大小和预处理,这可以提高您的编译次。

// We can assume this will be exactly 64 bits on all our target platforms.
TInt64 myInt = 0x1000000000000000;    

P.S。虽然它不能涵盖typedef一般Marshall Cline's C++ FAQ,但对初学者和专家来说都是一个很好的资源。