-1

我刚刚了解了 typedef。假设我有一个实例:

private:
  typedef std::string int doubles abc;

当我创建实例 abc 的访问器时:

returnType get(){...}

我应该在 returnType 中放什么?是 abc 还是数据类型?谢谢

4

1 回答 1

2

我不确定你想在这里做什么。您typedef的语法无效,并且“双打”不是 C++ 类型(但可能只是一个错字)。有效语法的示例是:

typedef std::string abc;
typedef int foo; 
...

然后您可以使用typedefin 函数签名,就像其他类型一样:

abc getValue();

虽然如果你想在公共成员函数中使用它,你应该把它放在你的类typedef的一部分。public而且你应该知道,你的类之外的代码总是必须在typedef你的类名前面加上前缀,除非它typedef再次被 'd 。

class SomeClass {
public:
    typedef std::string foo;
};

// Somewhere outside SomeClass
SomeClass::foo bar = ...
typedef SomeClass::foo localFoo;
localFoo fooBar = ...;

除此之外:typedef不提供任何方式让变量代表一种以上的类型。C++ 是一种静态类型语言,所以这不可能直接实现。但是,您可以:

  • 使用具有公共接口的多态类,派生类的实例可以被视为基类的实例,但做不同的事情
  • 使用一个union和一些鉴别器来存储它当前存储的类型
  • 使用void*和铸造 -不推荐!
  • 使用其他人建议的类似boost::variantboost::any

编辑:最后,关于您使用术语“实例”:它通常用于指代类的实例,即属于类的特定对象。您的意思是“成员变量”。

于 2013-01-19T21:16:55.930 回答