是否可以有一个“自动”成员变量?

新手上路,请多包涵

例如,我想要一个类型为 auto 的变量,因为我不确定它是什么类型。

当我尝试在类/结构声明中声明它时,它给了我这个错误:

无法推断自动类型。需要初始化器

有办法解决吗?

 struct Timer {

    auto start;

};

原文由 Oleksiy 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 418
1 个回答

你可以,但你必须声明它 staticconst

 struct Timer {
    static const auto start = 0;
};

Coliru 中的一个工作示例

由于这个限制,您因此不能将 start 作为非静态成员,并且不能在不同的对象中具有不同的值。

如果您想要不同类型的 start 用于不同的对象,最好将您的类作为模板

template<typename T>
struct Timer {
    T start;
};

如果您想推断 T 的类型,您可以制作一个类似工厂的函数来进行类型推断。

 template<typename T>
Timer<typename std::decay<T>::type> MakeTimer(T&& startVal) {   // Forwards the parameter
   return Timer<typename std::decay<T>::type>{std::forward<T>(startVal)};
}

活生生的例子

原文由 Mark Garcia 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题