【问题标题】:Possible to use extern variable in classes?可以在类中使用外部变量吗?
【发布时间】:2016-10-12 00:26:59
【问题描述】:

在C++中,是否可以将类成员变量标记为extern?

可以吗

class Foo {
    public:
        extern string A;
};

字符串 A 在我包含的另一个头文件中定义在哪里?

【问题讨论】:

  • 不是。你想达到什么目的?也许您正在寻找静态成员变量?
  • 我有一个巨大的向量,我想将它包含在可执行文件中,而不必在实例化对象时读取它。我将研究静态成员变量。有没有办法在不同的文件中定义它们?
  • 是的,事实上你几乎必须这样做。
  • 您也可以将其设为 .cpp 文件中的静态变量,而不是类成员
  • 问题是我在 .cpp 文件中进行编码,而变量会占用 50,000 行,我不希望在我正在编码的文件中出现这种情况(它很难看,而且它会减慢 Sublime 的速度)

标签: c++ c++11 extern


【解决方案1】:

如果我理解您的问题并正确评论,您正在寻找static data members

将该字段声明为static

// with_static.hpp
struct with_static
{
    static vector<string> static_vector;
};

仅在一个 TU(±.cpp 文件)中定义:

// with_static.cpp
vector<string> with_static::static_vector{"World"};

然后你就可以使用它了。请注意,您可以使用class::fieldobject.field 表示法,它们都引用同一个对象:

with_static::static_vector.push_back("World");

with_static foo, bar;
foo.static_vector[0] = "Hello";

cout << bar.static_vector[0] << ", " << with_static::static_vector[1] << endl;

上面应该打印Hello, World

live demo

【讨论】:

  • 向量大约有 50,000 个条目,我想在代码中对其进行初始化(比如有向量 v = {"first_word", "second_word .... "fifty-thousandth word"})。因为这么长,我希望能够在不同的文件中声明它。所以我有 Foo.h 和 Foo.cpp;有没有办法将成员变量存储在 another 文件中?
  • 我不确定我是否完全理解该解决方案。我希望能够在 with_static.hpp 文件中声明 static_vector(就像您所做的那样),但我希望在 with_static.cpp 文件中进行初始化。我想在 another 文件中有类似 static_vector = {"hello", "world"} 的东西。有可能吗
  • 可以是项目中的任意.cpp文件。 (或任何头文件,如果该头只包含一次,但请将其保存在 .cpp 文件中)
  • 向量是绝对必要的吗? std::initializer_list 的开销可能会更少。
  • 您可能是对的,但我正在尽我对问题+评论的理解回答
猜你喜欢
  • 1970-01-01
  • 2023-02-11
  • 2011-11-30
  • 1970-01-01
  • 2012-06-15
  • 2010-09-09
  • 2017-05-26
  • 1970-01-01
相关资源
最近更新 更多